невозможно создать вложенную реактивную форму - PullRequest
0 голосов
/ 28 августа 2018

Код / демо находится на https://stackblitz.com/edit/angular-jx7fdu

Я пытаюсь создать вложенную реактивную форму. Это простая форма регистрации. Он имеет Firstname, Lastname, email, Password и VerifyPassword Поле. Я также создал валидаторы для полей. html также присваивает Bootstrap classes в зависимости от того, есть ли в поле ошибки или нет.

<input id="firstname" type="text" class="form-control" formControlName="firstName" [ngClass]="validateField(signupForm,'firstName')" >
      <app-show-errors [control]="signupForm.controls.firstName"></app-show-errors>

validateField в helper.service.ts назначает Bootstraps is-valid и is-invalid классы для визуального представления. app-show-errors компонент дает текстовое представление об ошибке.

Для verify password я хочу проверить, что его значение совпадает со значением поля password. Для этого я скомбинировал их в FormGroup и передаю FormGroup в функцию проверки.

В signup-component.component.ts

    createForm(){ 
        this.signupForm = this.fb.group({
          firstName:[null,[Validators.required,this.helper.validateName]],           lastName:[null,[Validators.required,Validators.pattern(/[A-Za-z]+/)]], 
          email:[null,[Validators.required,Validators.pattern(this.EMAIL_PATTERN)]], 
/*new group for password and verify password. Each of them should match the password criteria and the group should validate that the values of password and verify password is same*/
    passwordGroup:this.fb.group({
            password:[null,[Validators.required,Validators.minLength(8),this.helper.validatePassword]],             confirmPassword:[null,[Validators.required,Validators.minLength(8),this.helper.validatePassword]]
          },{validator:this.helper.confirmPasswordValidator})

        });
      }

Теперь моя главная проблема в том, что я не могу заставить работать вложенную форму (passwordGroup). Я вижу следующую ошибку в консоли.

ERROR Error: formGroup expects a FormGroup instance. Please pass one in.

Example:

<div [formGroup]="myGroup"> <input formControlName="firstName"> </div>

In your class:

this.myGroup = new FormGroup({ firstName: new FormControl() });

1 Ответ

0 голосов
/ 28 августа 2018

Измени свой

<div class="form-group" [formGroup]="passwordGroup">

в

<div class="form-group" formGroupName="passwordGroup">

Вложенные группы форм используют formGroupName

Вы можете найти больше документации здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...