У нас есть компонент, который имеет динамически построенную форму. Код для добавления элемента управления с валидаторами может выглядеть так:
var c = new FormControl('', Validators.required);
Но допустим, что я хочу добавить второй валидатор позже . Как мы можем этого добиться? Мы не можем найти никакой документации по этому поводу в Интернете. Я нашел, хотя в элементах управления формы есть setValidators
this.form.controls["firstName"].setValidators
но неясно, как добавить новый или настраиваемый валидатор.
angular
forms
angular-reactive-forms
скромный
источник
источник
.updateValueAndValidity()
элемент управления формы после установки новых валидаторов.Чтобы добавить к тому, что опубликовал @Delosdos.
Установите валидатор для элемента управления в
FormGroup
:this.myForm.controls['controlName'].setValidators([Validators.required])
Удалите валидатор из элемента управления в FormGroup:
this.myForm.controls['controlName'].clearValidators()
Обновите FormGroup после выполнения любой из приведенных выше строк.
this.myForm.controls['controlName'].updateValueAndValidity()
Это отличный способ программно настроить проверку формы.
источник
updateValueAndValidity
методе, который однажды может пригодиться!updateValueAndValidity
по-прежнему используется для проверки и не обрабатывается иначе в новых версиях Angular. Что происходит, этоsetValidators
обновляет валидаторы, но не выполняет проверку, а затем вы используете ееupdateValueAndValidity
для выполнения проверки. Вы должны настраивать валидаторы в точке, где обнаружение изменений обрабатывает их за вас, но вы найдете использованиеupdateValueAndValidity
в группе или элементе управления в зависимости от того, какой валидатор вы только что установили критически важным - github.com/angular/angular/issues/19622#issuecomment- 341547884 .updateValueAndValidity
. Спасибо @shammelburg!updateValueAndValidity()
, но в некоторых случаях это не так. если вы добавилиupdateValueAndValidity()
после,setValidators()
это сразу повлияет на изменения, связанные с управлением . Так что лучше добавить updateValueAndValidity () `.Если вы используете reactiveFormModule и определите formGroup следующим образом:
чем вы можете добавить новый валидатор ( и сохранить старые ) в FormControl с помощью этого подхода:
FormControl.validator возвращает валидатор компоновки, содержащий все ранее определенные валидаторы.
источник
control.setValidators(control.validator ? [ control.validator, Validators.email ] : Validators.email);
чтобы обойти строгие нулевые проверкиЯ думаю, что выбранный ответ неверен, поскольку исходный вопрос - «как добавить новый валидатор после создания formControl».
Насколько я знаю, это невозможно. Единственное, что вы можете сделать, - это динамически создать массив валидаторов.
Но чего нам не хватает, так это наличия функции addValidator (), которая не переопределяет валидаторы, уже добавленные в formControl. Если у кого-то есть ответ на это требование, было бы неплохо разместить его здесь.
источник
control.setValidators(control.validator ? [ control.validator, Validators.email ] : Validators.email);
, сработает.В дополнение к ответу Eduard Void вот
addValidators
метод:С его помощью вы можете динамически устанавливать валидаторы:
источник