Saltar al contenido

Validación de alternancia de formularios reactivos de Angular 4 para elementos de formulario ocultos

Recabamos en distintos espacios y así de esta manera darte la respuesta para tu problema, si tienes dificultades déjanos tu comentario y contestamos porque estamos para servirte.

Solución:

En mi aplicación, tengo un requisito similar. Si el usuario solicita ser notificado por mensaje de texto, se requiere el teléfono. De lo contrario, el número de teléfono es opcional.

Escribí este método:

setNotification(notifyVia: string): void 
    const phoneControl = this.customerForm.get('phone');
    if (notifyVia === 'text') 
        phoneControl.setValidators(Validators.required);
     else 
        phoneControl.clearValidators();
    
    phoneControl.updateValueAndValidity();

Se llama desde este código que está en ngOnInit:

    this.customerForm.get('notification').valueChanges
                     .subscribe(value => this.setNotification(value));

Si el usuario cambia el campo de notificación (que es un botón de radio), llama al setNotification método que pasa el valor. Si el valor es notificación por ‘texto’, establece la validación del teléfono como requerida.

De lo contrario, borra la validación del campo de teléfono.

Entonces eso deber llamada updateValueAndValidity para actualizar la información del formulario con esta nueva validación.

Incluso los campos están ocultos para el usuario, los campos están activos en el formulario reactivo. Entonces, simplemente necesita deshabilitar el campo del reactivo usando el siguiente código

this.myForm.get("nickName").disable();

Cambie la función toggleNick() como se indica a continuación

toggleNick() 
    this.showNick = !this.showNick;
    if(showNick) 
         this.myForm.get("nickName").enable();
     else 
         this.myForm.get("nickName").disable();
    

Creo que la mejor opción para hacer esto es hacer que los campos formen parte del formulario inicial con todas sus validaciones y cuando quieras deshabilitar y habilitar campos o formularios anidados mediante programación.

Ejemplo: https://stackblitz.com/edit/angular-ojebff

https://stackblitz.com/edit/angular-ojebff?embed=1&file=app/input-errors-example.html

Reseñas y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *