我有一个Angular2应用程序,我已经构建了一个小动态表单模块,允许我使用基于模型的方法构建复杂的表单。
我拥有的一个组件允许我传入一个FormObject实例列表,然后继续将它们放入FormArray中。我创建了以下自定义验证器函数
import { FormArray } from '@angular/forms';
export function allExceptLastOneValidator (c: FormArray): { [key: string] : any} {
if (c.controls.length < 2) {
return null;
}
for (let i: number = 0; i < c.controls.length-1; i++) {
if (!c.controls[i].valid) {
return {
allExceptLastOneValid: false
};
}
}
return null;
}
然后我就像这样使用它
this.formElement.setControl("models", new FormArray([], allExceptLastOneValidator));
这个验证器的想法是我希望它验证FormArray中除最后一个之外的所有FormGroup实例(因为最后一个实例总是空白/新的,并且在最后一个无效条目变为有效时自动添加新的实例)。
但是,如果我myFormArray.valid
,我知道即使我的验证器返回null,表单数组仍然无效。这样做的原因是它仍然验证了最后一个FormGroup,正如我所说的那样,它总是无效的。
我的自定义验证器正在被正确触发并且工作正常(我调试了它)。问题是它似乎不会影响FormArray.valid
属性。
有人可以解释FormArray.validator函数的用途是什么吗?我找不到关于此事的任何文档,我认为它应该完全覆盖FormGroup / FormArray的验证,但显然情况并非如此。这是一个错误,还是我在假设中弄错了?