Пользовательская функция валидатора Angular2 FormArray, не влияющая на свойство "valid"
У меня есть приложение 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));
Идея этого валидатора состоит в том, что я хочу, чтобы он проверял все экземпляры FormGroup в FormArray, кроме последнего (так как последний всегда пустой / новый, а новый добавляется автоматически, как только последняя недействительная запись становится действительной).
Если я сделаю myFormArray.valid
Тем не менее, я получаю, что массив формы по-прежнему является недействительным, даже если мой валидатор возвращает ноль. Причина этого заключается в том, что он все еще проверяет последнюю группу FormGroup, которая, как я уже сказал, всегда будет недействительной.
Мой пользовательский валидатор корректно запускается и работает нормально (я его отладил). Проблема в том, что это, кажется, не влияет на FormArray.valid
имущество.
Может кто-нибудь объяснить, какова цель функции FormArray.validator? Я не смог найти никакой документации по этому вопросу, и я подумал, что она должна полностью переопределять валидацию FormGroup/FormArray, но, очевидно, это не так. Это ошибка или я ошибаюсь в своих предположениях?