En angular2 quiero activar Validadores para algunos controles cuando se cambia otro control. ¿Hay alguna forma de que pueda decirle al formulario que se vuelva a validar? Mejor aún, ¿puedo solicitar la validación de campos específicos?
Ejemplo: Dada la casilla de verificación X y la entrada P. La entrada P tiene un validador que se comporta de manera diferente en función del valor del modelo de X.Cuando X está marcado / desmarcado, necesito invocar el validador en P. El validador en P mirará el modelo para determinará el estado de X y validará P en consecuencia.
Aquí hay un código:
constructor(builder: FormBuilder) {
this.formData = { num: '', checkbox: false };
this.formGp = builder.group({
numberFld: [this.formData.num, myValidators.numericRange],
checkboxFld: [this.formData.checkbox],
});
}
this.formGp.controls['checkboxFld'].valueChanges.observer({
next: (value) => {
// I want to be able to do something like the following line:
this.formGp.controls['numberFld'].validator(this.formGp.controls['numberFld']);
}
});
¿Alguien tiene una solución? ¡Gracias!
forms
validation
angular
Bonneville
fuente
fuente
Respuestas:
No sé si todavía está buscando una respuesta, así que aquí están mis sugerencias:
Eche un vistazo a esto: Angular 2 - AbstractControl
Creo que lo que podrías hacer es seguir:
Esto debería activar y ejecutar los validadores. Además, el estado también se actualiza. Ahora debería poder consultar el valor de la casilla de verificación dentro de la lógica de su validador.
¡Espero que esto ayude!
EDITAR: enlace actualizado y ejemplo. El código cambió mientras escribía mi respuesta.
EDIT_2: alpha.48 cambia EventEmitter.observer a EventEmitter.subscribe!
EDIT_3: enlace modificado a la implementación real, enlace agregado a los documentos
Guía de validación
Documentación de FormControl
fuente
con mi ControlGroup hago esto porque tengo errores divs al verificar si se tocan
(this.form es mi ControlGroup)
fuente
Con la ayuda de este blog
enlace del blog
Me encontré con una solución con la combinación de la respuesta de Nightking
fuente
Esto hizo el truco para mi
fuente
Hay formas más elegantes de modelar este comportamiento, por ejemplo, poner su estado en un ReplaySubject y observarlo, y luego usar validadores asíncronos que observan el estado, pero el enfoque pseudocodificado a continuación debería funcionar. Simplemente observe los cambios de valor en la casilla de verificación, actualice el modelo según corresponda, luego fuerce una revalidación de numberFld con la calibración updateValueAndValidity.
fuente
fuente