0

我正在使用 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,那么它就可以正常工作。为什么会这样?

谢谢

4

1 回答 1

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"

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

它会起作用,但是如果您需要这样做,可能会使代码复杂化。

于 2019-10-14T23:53:27.197 回答