Angular 角度验证器函数显示为未定义

Angular 角度验证器函数显示为未定义,angular,validation,angular-formbuilder,Angular,Validation,Angular Formbuilder,我正在使用Angular FormBuilder并使用我自己的验证。 我有一个表单生成器 this.form = this.formBuilder.group({ password: ['', [Validators.required, this.matcher.strong]], confirmPassword: [''], action: 'newUser' },{ validator: this.checkPasswords }); 以及检查密码功能 checkPasswor

我正在使用Angular FormBuilder并使用我自己的验证。 我有一个表单生成器

this.form = this.formBuilder.group({
  password: ['', [Validators.required, this.matcher.strong]],
  confirmPassword: [''],
  action: 'newUser'
},{ validator: this.checkPasswords });
以及检查密码功能

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

  this.isTrue = true;
}
当我调用this.isTrue时,我得到以下错误。
无法设置未定义的属性“isTrue”
。如果我从验证器中删除了checkPasswords函数,那么它就可以正常工作。为什么会发生这种情况


谢谢

您无法访问
这样做,因为它超出范围。让我举例说明:

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"
这样做的问题是,您使代码变得非常混乱,不可重用(想象一下,在其他没有此属性的组件上使用相同的验证器)


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

您可以从验证器访问组件。验证器唯一能做的就是与formgroup或formcontrol交互。解决这个问题的糟糕方法是在方法引用之后添加
.bind(this)
。但是不要考虑使用它,谢谢你的回答,Elia,有没有办法解决这个问题呢?当我无法在函数中引用它时,我如何给this.isTrue提供一个值?您能解释一下设置此属性的目的吗?