angular2中的简单自定义验证

时间:2017-04-04 07:26:34

标签: angular typescript

我已经创建了这个验证功能:

private customValidateField(c: FormControl): any {
    return c.value[0] === 'a' ? null : { notValid: true };
}

所以,在我的反应形式上:

constructor(private fb: FormBuilder)
{
  this.form = this.fb.group({
    field: ['', Validators.required, this.customValidateField],
    ...
  }
}

当我在这个字段中写任何字符时,我收到了这个错误:

  

错误:返回Promise或Observable的预期验证器。

有什么想法吗?

2 个答案:

答案 0 :(得分:11)

“field”数组中的第三项是异步验证器(或它们的数组)。因此,要指定多个同步验证器,您需要:

将它们作为数组传递

this.fb.group({
  'formControlName': [this.hero.name, [
      Validators.required,
      Validators.minLength(4)
  ]]
});

或使用

组合它们(如Jordi所写)
Validators.compose(...)

FormBuilder API doc没有详细讨论参数,但由于它只是使用FormControl-s创建FormGroup的快捷方式,因此您可以查看FormControl构造函数: https://angular.io/docs/ts/latest/api/forms/index/FormControl-class.html

答案 1 :(得分:5)

我刚刚使用Validators.compose

this.form = this.fb.group({
  field: ['', Validators.compose([Validators.required, this.validateCardNumber])],
  ...
}