Пользовательская функция валидатора 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, но, очевидно, это не так. Это ошибка или я ошибаюсь в своих предположениях?

0 ответов

Другие вопросы по тегам