Tenemos un componente que tiene una forma construida dinámicamente. El código para agregar un control con validadores podría verse así:
var c = new FormControl('', Validators.required);
Pero digamos que quiero agregar 2nd Validator más tarde . ¿Cómo podemos lograr esto? No podemos encontrar ninguna documentación sobre esto en línea. Encontré aunque en los controles de formulario hay setValidators
this.form.controls["firstName"].setValidators
pero no está claro cómo agregar un validador nuevo o personalizado.
angular
forms
angular-reactive-forms
melegante
fuente
fuente
.updateValueAndValidity()
al control de formulario después de configurar los nuevos validadores.Para agregar a lo que @Delosdos ha publicado.
Establecer un validador para un control en
FormGroup
:this.myForm.controls['controlName'].setValidators([Validators.required])
Elimine el validador del control en FormGroup:
this.myForm.controls['controlName'].clearValidators()
Actualice FormGroup una vez que haya ejecutado cualquiera de las líneas anteriores.
this.myForm.controls['controlName'].updateValueAndValidity()
Esta es una forma asombrosa de configurar mediante programación la validación de su formulario.
fuente
updateValueAndValidity
método, ¡podría ser útil algún día!updateValueAndValidity
todavía se usa para realizar la validación y no se maneja de manera diferente en las versiones más recientes de Angular. Lo que sucede es quesetValidators
actualiza los validadores, pero no ejecuta una verificación de validación, y luego se usaupdateValueAndValidity
para realizar la validación. Debe configurar los validadores en un punto donde la detección de cambios lo maneja por usted, pero encontrará que el usoupdateValueAndValidity
en el grupo o control dependiendo del validador que acaba de configurar es crucial: github.com/angular/angular/issues/19622#issuecomment- 341547884 .updateValueAndValidity
. ¡Gracias @shammelburg!updateValueAndValidity()
, pero en algunos casos no. si agregóupdateValueAndValidity()
despuéssetValidators()
, afectará inmediatamente los cambios relacionados con el control . Así que es mejor agregar updateValueAndValidity () `.Si está utilizando reactiveFormModule y tiene formGroup definido así:
de lo que puede agregar un nuevo validador ( y mantener los antiguos ) a FormControl con este enfoque:
FormControl.validator devuelve un validador de composición que contiene todos los validadores definidos previamente.
fuente
control.setValidators(control.validator ? [ control.validator, Validators.email ] : Validators.email);
para sortear los estrictos controles nulosCreo que la respuesta seleccionada no es correcta, ya que la pregunta original es "cómo agregar un nuevo validador después de crear formControl".
Hasta donde yo sé, eso no es posible. Lo único que puede hacer es crear la matriz de validadores de forma dinámica.
Pero lo que echamos de menos es tener una función addValidator () para no anular los validadores ya agregados a formControl. Si alguien tiene una respuesta para ese requisito, sería bueno que lo publicara aquí.
fuente
control.setValidators(control.validator ? [ control.validator, Validators.email ] : Validators.email);
funcionaría.Además de la respuesta de Eduard Void, aquí está el
addValidators
método:Al usarlo, puede configurar validadores dinámicamente:
fuente