Angular: добавить в существующий набор валидаторов Formcontrol
Как добавить или продвинуть существующий набор валидаторов на FormControl? Я хочу добавить в виде массива. Следующий ответ установит их все сразу.
В Angular, как добавить валидатор в FormControl после создания элемента управления?
Angular - динамическое добавление / удаление валидаторов
newFormControl.setValidators([Validators.required])
newFormControl.setValidators([Validators.pattern("^[0-9]*$")])
newFormControl.setValidators([Validators.maxLength])
Ответы
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 только одним вызовом.)
Вы можете установить массив с помощью 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));