FormGroup get字段值:TypeError:无法读取属性' get'未定义的

时间:2017-08-11 10:40:43

标签: angular angular-forms angular-validation

我正在尝试对" 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
  }

2 个答案:

答案 0 :(得分:1)

您试图通过将this绑定到验证器来实现的目标可能会失败,因为多个验证器函数被合并到一个上下文可能不同的单个函数中。

但是,如果您遵循validator function的足迹,则可以执行以下操作:

checkIfMatchingPasswords(control: AbstractControl): ValidationErrors | null {
    return control.root.get('password').value === control.value ? null : { notSame: true };
}

诀窍是每个AbstractControl都知道parentroot

答案 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};
    }
  }