我正在使用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函数,那么它就可以正常工作。为什么会这样?
谢谢
答案 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"
这个问题是,您使代码非常混乱,不可重用(想象一下,在没有此属性的其他组件上使用相同的验证器)。
它可以工作,但是如果您需要这样做,可能是您使代码中的事情变得复杂了。