Angular: добавить в существующий набор валидаторов Formcontrol

Nov 26 2020

Как добавить или продвинуть существующий набор валидаторов на FormControl? Я хочу добавить в виде массива. Следующий ответ установит их все сразу.

В Angular, как добавить валидатор в FormControl после создания элемента управления?

Angular - динамическое добавление / удаление валидаторов

newFormControl.setValidators([Validators.required])
newFormControl.setValidators([Validators.pattern("^[0-9]*$")])
newFormControl.setValidators([Validators.maxLength])

Ответы

GyörgySzy Nov 26 2020 at 15:21

SetValidators () УДАЛЯЕТ предыдущие валидаторы, поэтому вы можете захотеть собрать свои валидаторы отдельно и, например, сохранить их в двух переменных и установить их с помощью одного setValidators () по мере необходимости.


    const validators1 = [Validators.required, Validators.pattern("^[0-9]*$"), Validators.maxLength(10)])]
    const validators2 = [Validators.required]

    if( if_you_want_all_three_validators ){
        newFormControl.setValidators(validators1)
    } else {
        // by default you want only one validator:
        newFormControl.setValidators(validators2)
    }

Таким образом, вам не нужно устанавливать их один за другим.

(Поскольку валидаторы не хранятся в массиве за пределами setValidators (), вы должны отправить все валидаторы в setValidators только одним вызовом.)

Noname Nov 27 2020 at 10:03

Вы можете установить массив с помощью new Array<ValidatorFn>();и подтолкнуть валидаторы ниже по отдельности.

let validatorList = new Array<ValidatorFn>();
validatorList.push(Validators.required);
validatorList.push(Validators.pattern("^[0-9]*$"));
validatorList.push(Validators.maxLength(item.characterLimit));
newForm.addControl('test', new FormControl(d'5', validatorList));