Angular Validator函数显示为未定义

时间:2019-10-14 23:29:36

标签: angular validation angular-formbuilder

我正在使用Angular FormBuilder并使用自己的验证。 我有一个formBuilder ...

this.form = this.formBuilder.group({
  password: ['', [Validators.required, this.matcher.strong]],
  confirmPassword: [''],
  action: 'newUser'
},{ validator: this.checkPasswords });

和checkPasswords函数

checkPasswords(group: FormGroup) {
  let pass = group.get('password').value;
  let confirmPassword = group.get('confirmPassword').value;

  this.isTrue = true;
}

当我致电this.isTrue时,出现以下错误。 Cannot set property 'isTrue' of undefined。如果我从验证器中删除了checkPasswords函数,那么它就可以正常工作。为什么会这样?

谢谢

1 个答案:

答案 0 :(得分:0)

您无法通过这种方式访问​​this,因为它不在范围内。让我举例说明:

class Foo {
    bar = 'biz'
    a() {
       console.log(this.bar);
        return this.b;
    }
    aWorkaround() {
        return this.b.bind(this);
    }
    b() {
        console.log(this.bar);
    }
}

const obj = new Foo();

const func = obj.a();
// console shows "biz"
func();
// error: cant access bar of undefined

const funcWorkaround = obj.aWorkaround();
funcWorkaround();
// Console shows "biz"

这个问题是,您使代码非常混乱,不可重用(想象一下,在没有此属性的其他组件上使用相同的验证器)。

它可以工作,但是如果您需要这样做,可能是您使代码中的事情变得复杂了。