如何在控件启动后更改控件的验证?

时间:2016-06-16 07:15:43

标签: validation angular angular2-forms

我想知道如何在字段上动态更改验证。我有控制组,有5个字段。为此,我想在此控制组上使用自定义验证器,以检查是否有任何输入不为空。如果其中任何一个为空,我想设置此控制组中所有字段的验证是必需的。

为此,在验证是否有任何输入为空之后,我需要动态更改每个控件的验证。我得到了第一部分 - 但我仍然无法弄清楚如何在控件启动后更改控件的验证。有什么想法吗?

我现在正在做的是,我在这个小组上放了一个验证器:

this._formBuilder.group({....}, {validator: customValidator})

1 个答案:

答案 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();
  }
}