Я пытаюсь настроить валидатор на форме в моем приложении Angular, чтобы проверить, совпадают ли оба введенных пароля. Я думаю, что Angular документация не очень хорошо объясняет это.
Это часть моего компонента регистрации:
export function passwordMatchValidator(password: string): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } => {
return password !== control.value ? { mismatch: true } : null;
};
}
@Component({
selector: 'app-sign-up-form',
templateUrl: './sign-up-form.component.html'
})
export class SignUpFormComponent {
signUpForm: FormGroup;
constructor(
private fb: FormBuilder
) {
this.signUpForm = this.fb.group({
email: [null, [Validators.required, Validators.email]],
password: [null, [Validators.required, Validators.minLength(6)]],
passwordRepeat: [
null,
[Validators.required, Validators.minLength(6), passwordMatchValidator(this.password.value)]
]
});
}
get email() {
return this.signUpForm.get('email');
}
get password() {
return this.signUpForm.get('password');
}
get passwordRepeat() {
return this.signUpForm.get('passwordRepeat');
}
Я хочу использовать следующий код в шаблоне компонента:
<div *ngIf="passwordRepeat.errors.mismatch">
The passwords are not the same.
</div>
К сожалению, что-то не так, потому что в консоли я получаю странную ошибку, которая говорит, что на самом деле ничего не полезно (TypeError: this.signUpForm не определено)
Надеюсь, вы сможете мне помочь.
--- Обновлено ---
constructor(
private fb: FormBuilder
) {
this.signUpForm = this.fb.group({
email: [null, [Validators.required, Validators.email]],
password: [null, [Validators.required, Validators.minLength(6)]],
passwordRepeat: [
null,
[Validators.required, Validators.minLength(6), passwordMatchValidator(this.password.value)]
]
});
}
passwordMatchValidator(password: string): ValidatorFn {
return (control: AbstractControl): ValidationErrors => {
return password !== control.value ? { mismatch: true } : null;
};
}
Я пытался удалить аргумент fn и возиться в валидаторе fn, чтобы получить оригинальный пароль, но ни одна из моих попыток не сработала.