El formulario Angular Reactivo se envía dos veces y muestra un mensaje de error de inválido después de una envío exitoso.
Tengo un formulario Reactivo de Angular con una validación personalizada de ErrorState. El comportamiento deseado es el siguiente:
- Solo mostrar un mensaje de error no válido cuando se ha enviado un campo y no se ha ingresado nada en el campo de entrada de texto.
- Si el formulario se ha enviado correctamente, restablecer la validación y el estado de envío a falso y no mostrar el mensaje de error no válido.
Tengo el punto #1 funcionando con el ErrorStateMatcher personalizado. Después de una presentación exitosa, estoy llamando a la función resetForm en FormGroupDirective, que vuelve a configurar el estado de envío en FALSO. El problema es que el formulario parece estar siendo enviado dos veces, por lo que el estado de envío vuelve automáticamente a VERDADERO e inmediatamente muestra el mensaje no válido después de una presentación exitosa.
Un ejemplo de trabajo de este problema se puede encontrar aquí
https://stackblitz.com/edit/add-angular-material-p9btep?devtoolsheight=33&file=src/app/app.component.ts
davy.ai
Solución para un Formulario Reactivo de Angular con Validación de Estado de Error Personalizada
Para lograr el comportamiento deseado para un formulario reactivo de Angular con validación de estado de error personalizada, es necesario seguir los siguientes pasos:
Para hacer esto, puedes utilizar la clase ErrorStateMatcher para mostrar el mensaje de error solamente cuando el campo ha sido tocado y está vacío. Puedes implementar la función de comparación para comprobar el valor del control relacionado y el estado de tocado.
Luego puedes asignar este comparador de estado de error personalizado a tu control de formulario como se muestra a continuación:
Para lograr este comportamiento, puedes crear una función para manejar el envío del formulario con el evento onSubmit() y restablecer la validación del formulario y el estado de envío como se muestra a continuación:
Sin embargo, asegúrate de agregar
event.preventDefault()
dentro de la función para evitar el comportamiento de envío de formulario predeterminado y evitar que el formulario se envíe dos veces.Con estos cambios, deberías poder lograr el comportamiento deseado para tu formulario reactivo de Angular con validación de estado de error personalizada.