Угловой 8: Реактивный пароль соответствия формы - PullRequest
1 голос
/ 28 июня 2019

У меня есть реактивная форма в моем угловом проекте, которая определяет вот так:

this.createUserFormGroup = new FormGroup({
  'userName': new FormControl(null, [Validators.required, Validators.maxLength(256)]),
  'name': new FormControl(null, [Validators.required, Validators.maxLength(64)]),
  'roleNames': new FormArray([]),
  'password': new FormControl(null, [Validators.required, Validators.maxLength(32)]),
  'confirmPassword': new FormControl(null, [Validators.required])
});

как я могу проверить соответствие пароля и подтвердить пароль?

Ответы [ 2 ]

2 голосов
/ 28 июня 2019

Вы можете создать собственный валидатор и использовать его в FormGroup как

    passwordConfirming(c: AbstractControl): { invalid: boolean } {
    if (c.get('password').value !== c.get('confirmPassword').value) {
        return {invalid: true};
    }
}

И вам нужно использовать этот валидатор как.

 this.createUserFormGroup = new FormGroup({
  'userName': new FormControl(null, [Validators.required, Validators.maxLength(256)]),
  'name': new FormControl(null, [Validators.required, Validators.maxLength(64)]),
  'roleNames': new FormArray([]),
  'password': new FormControl(null, [Validators.required, Validators.maxLength(32)]),
  'confirmPassword': new FormControl(null, [Validators.required])
},{validator: this.passwordConfirming});

и проверять html как

 <span *ngIf="createUserFormGroup.errors?.invalid">
      Password doesn't match
  </span>
0 голосов
/ 28 июня 2019

Я сразу использовал compare валидатор @rxweb/reactive-form-validators без создания пользовательской функции и написания слишком большого количества кода в компоненте.

Установка:

npm i @rxweb/reactive-form-validators

Я сравнил поле confirmPassword и упомянул параметр fieldName.Вот код компонента.

 ngOnInit() {
    this.userFormGroup = this.formBuilder.group({
        password:['',], 
        confirmPassword:['', RxwebValidators.compare({fieldName:'password' })], 
    });
}

Вот полный код app.component.ts, где вы можете отобразить сообщение об ошибке, объявив его глобально следующим образом.

ReactiveFormConfig.set({"validationMessage":{"compare":"Input does not match"}});

Вотполный HTML-код.

<div>
  <form  [formGroup]="userFormGroup">
    <div class="form-group">
      <label>Password</label>
      <input type="text" formControlName="password" class="form-control"  />
     <small class="form-text text-danger" *ngIf="userFormGroup.controls.password.errors">{{userFormGroup.controls.password.errors.compare.message}}<br/></small>    
    </div>
    <div class="form-group">
      <label>Confirm Password</label>
      <input type="text" formControlName="confirmPassword" class="form-control"  />
    <small class="form-text text-danger" *ngIf="userFormGroup.controls.confirmPasswossrd.errors">{{userFormGroup.controls.confirmPassword.errors.compare.message}}<br/></small>
    </div>
    <button [disabled]="!userFormGroup.valid" class="btn btn-primary">Submit</button>
  </form>
</div>

Рабочий пример

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