Пользовательский валидатор с параметром текстового поля - PullRequest
0 голосов
/ 03 ноября 2019

Я хочу добавить пользовательскую проверку для подтверждения пароля со значением пароля в качестве ввода для валидатора.

Контроль формы

accDetailsSF: this.fb.group({
        nUname: ['', [Validators.required,unique_uname()]],
        nPassword: ['', [Validators.required, Validators.minLength(8)]],
        nCPassword: [{value: '', disabled: true}, [Validators.required, Validators.minLength(8), matchPassword(nPassword)]]
      }),

Ошибка: matchPassword (nPassword) <- Невозможно найти имя 'nPassword' </p>

function matchPassword(nPassword: FormControl){
  return (control: AbstractControl): {[key: string]:any} | null => {
    const nCPasswordV = control.value;
    const nPasswordV = nPassword.value
    if (nCPasswordV != nPasswordV) {
      return {'pwdMismatch': true}
    } else {
      return null;
    }
  };
}

1 Ответ

0 голосов
/ 03 ноября 2019

Добавить пользовательский валидатор в formGroup вместо formcontrol, чтобы вы могли получить доступ к элементу управления nPassword и nCPassword кабины

Попробуйте это:

  accDetailsSF: FormGroup;
  constructor(private fb:FormBuilder){
    this.accDetailsSF= this.fb.group({
        nUname: ['', [Validators.required]],
        nPassword: ['', [Validators.required, Validators.minLength(8)]],
        nCPassword: [{value: '', disabled: false}, [Validators.required, Validators.minLength(8)]]
      }, { 
      validators: matchPassword.bind(this)
      });
   }
   }
  export function matchPassword(formGroup: FormGroup) {
    const password  = formGroup.get('nPassword').value;
    const  confirmPassword = formGroup.get('nCPassword').value;
    console.log(password === confirmPassword ? null : { passwordNotMatch: true 
  });
    return password === confirmPassword ? null : { pwdMismatch: true };
  }

Пример

...