我正在尝试对" passwordConfirm"进行验证。字段,但我得到一个stange错误:ERROR TypeError: Cannot read property 'get' of undefined
这是我的代码:
loginForm: FormGroup;
ngOnInit(){
this.loginForm = new FormGroup({
'email': new FormControl(null, [Validators.required, Validators.email]),
'password': new FormControl(null, Validators.required),
'passwordConfirm': new FormControl(null, [Validators.required, this.checkIfMatchingPasswords.bind(this)]),
});
}
checkIfMatchingPasswords() {
return this.loginForm.get('password').value === this.loginForm.get('passwordConfirm').value ? null : { notSame: true} // error
}
答案 0 :(得分:1)
您试图通过将this
绑定到验证器来实现的目标可能会失败,因为多个验证器函数被合并到一个上下文可能不同的单个函数中。
但是,如果您遵循validator function的足迹,则可以执行以下操作:
checkIfMatchingPasswords(control: AbstractControl): ValidationErrors | null {
return control.root.get('password').value === control.value ? null : { notSame: true };
}
答案 1 :(得分:0)
解决方案是检查loginForm是否存在。如果我执行this.loginForm
的console.log,它会执行三次。第一次是未定义的,并导致错误。我不知道为什么会发生这种情况,也许这就是Angular的生命周期钩子。
checkIfMatchingPasswords() {
if (this.loginForm) {
return this.loginForm.get('password').value === this.loginForm.get('passwordConfirm').value ? null : {notSame: true};
}
}