Angular2 FormArray自定义验证器函数不影响“有效”属性

时间:2016-10-06 10:52:05

标签: angular angular2-forms custom-validators

我有一个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的验证,但显然情况并非如此。这是一个错误,还是我在假设中弄错了?

0 个答案:

没有答案