我正在尝试在我的 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 is undefined)
希望您能够帮助我。
- -更新 - -
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 中弄乱以获取原始密码,但我的尝试都没有奏效。