我想知道如何在字段上动态更改验证。我有控制组,有5个字段。为此,我想在此控制组上使用自定义验证器,以检查是否有任何输入不为空。如果其中任何一个为空,我想设置此控制组中所有字段的验证是必需的。
为此,在验证是否有任何输入为空之后,我需要动态更改每个控件的验证。我得到了第一部分 - 但我仍然无法弄清楚如何在控件启动后更改控件的验证。有什么想法吗?
我现在正在做的是,我在这个小组上放了一个验证器:
this._formBuilder.group({....}, {validator: customValidator})
答案 0 :(得分:1)
您可以使用根据值
更改行为的自定义验证程序class MyComponent {
constructor(fb:FormBuilder) {
this.form = fb.group({
c1: ['', (c) => this.myValidator(c)],
...
});
}
someState = true;
myValidator(c:Control) {
if(this.someState && control.value ....) {
}
}
}
这样,验证器可以例如访问当前组件的状态。您还可以将验证器移动到另一个类,并将该类的方法引用传递给validator参数,并更新此类的属性以更改验证器的行为。
class MyValidator {
someState = true;
validate(c:Control) {
if(this.someState && control.value ....) {
}
}
}
class MyComponent {
myValidator = new MyValidator();
constructor(fb:FormBuilder) {
this.form = fb.group({
c1: ['', this.myValidator.validate.bind(this.myValidator)],
...
});
}
onSomeEvent() {
this.myValidator.someState = !this.myValidator.someState;
this.form.control.c1.updateValueAndValidity();
}
}