Angular 角度验证器函数显示为未定义
我正在使用Angular FormBuilder并使用我自己的验证。 我有一个表单生成器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
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提供一个值?您能解释一下设置此属性的目的吗?