使用FormBuilder,我为电子邮件字段数组实例化一个FormArray。我为其分配了一组Validator
,其中包括自定义Validator
和Angular的内置Validators.email
。
this.formBuilder.array(
[this.formBuilder.control('')],
Validators.compose([customValidator, Validators.email])
)
以这种方式分配Validator
意味着FormArray
作为control
参数传递给验证器。我的自定义验证器可以调整为期望一个FormArray
,但是Validators.email
期望一个具有单个值的FormControl
。
如何将Angular内置验证器与FormArray
一起使用?
答案 0 :(得分:1)
formbuild数组方法指定validatorOrOpts or asyncValidator
参数要在表单数组本身而不是数组的控件上运行,所以有两种解决方法
将验证器添加到它自己的控件中
this.formBuilder.array(
[this.formBuilder.control('',Validators.email)],
Validators.compose([customValidator])
)
function customArrayEmailValidator(formArray: FormArray) {
if (formArray.length > 0) {
for (let c of formArray.controls) {
let state = Validators.email(c)
if (state !== null) {
return { emailInValid: state }
}
}
return null;
} else {
return null;
}
}
但是它仍然看起来像第一种方式