Armando Rivera
Nicolas Molina
ProfesorJuan Carlos Pinzón
¿Cómo implementar validaciones en formularios utilizando Angular?
Las validaciones en formularios son esenciales para asegurar la calidad y completitud de los datos que los usuarios ingresan. Angular ofrece una robusta estructura para manejar estas validaciones tanto de manera síncrona como asíncrona, permitiéndonos garantizar que los campos de entrada cumplan con requisitos específicos. En esta guía, exploraremos cómo podemos aplicar validaciones en un form control utilizando Angular.
¿Qué parámetros maneja un form control?
Un form control en Angular acepta tres parámetros de entrada:
¿Cómo implementar validaciones síncronas?
Para añadir validaciones síncronas a un formulario, se utiliza un conjunto de validadores proporcionados por Angular. Podemos incluir un código como el siguiente en el archivo TypeScript correspondiente:
import { Validators } from '@angular/forms'; const control = new FormControl('', [ Validators.required, // Campo obligatorio Validators.maxLength(10) // Máximo 10 caracteres ]);
Aquí, Validators.required asegura que el campo no esté vacío, mientras que Validators.maxLength(10) limita la entrada a un máximo de 10 caracteres.
¿Cómo reflejar el estado del campo en la interfaz de usuario?
Para mostrar de forma reactiva el estado de un campo en un formulario, se puede utilizar Angular Interpolation en el archivo HTML:
<p *ngIf="nameField.errors?.required && nameField.touched"> Este campo es requerido. </p> <p *ngIf="nameField.errors?.maxlength && nameField.touched"> El campo debe tener máximo diez caracteres. </p>
Este fragmento de código HTML muestra mensajes al usuario solo si el campo ha sido tocado (touched) y si existe un error de validación específico.
¿Cómo se puede interactuar con otros elementos del formulario?
Es posible habilitar o deshabilitar componentes, como un botón, dependiendo de la validez del form control. Aquí un ejemplo práctico:
<button [disabled]="nameField.invalid">Enviar</button>
En este caso, el botón se deshabilita automáticamente mientras el campo sea inválido, ofreciendo una capa adicional de control y asegurando que solo se pueda interactuar cuando la entrada sea válida.
¿Cuáles son las mejores prácticas para la experiencia del usuario?
Al diseñar formularios con validaciones, es crucial tener en cuenta la experiencia del usuario:
touched: Esto asegura que solo se muestran errores después de que el usuario haya ingresado o modificado datos.Implementar correctamente las validaciones en Angular no solo eleva la calidad de los datos recolectados, sino que también mejora la experiencia del usuario en la aplicación. Experimente con diferentes patrones de validación y siempre esté atento a la usabilidad de su interfaz.
Armando Rivera
Nicolas Molina
ProfesorJuan Carlos Pinzón
Brayan Estiven Sepúlveda Quintero
Diego Fernando Caviedes Camaho
Javier Fuentes Ríos
Daniel Castiblanco
Victor Alfredo Matzar Say
Rubén Darío Ferro Rugeles
byron xicara
Gisela Angela Cristaldo
José Ángel Soriano Soriano
Para la parte de maxLength queda mejor que se coloque dirty en lugar de touched, esto porque si el usuario excede los 10 caracteres necesita dar click en otro lugar para que se muestre el mensaje, con dirty se muestra automáticamente
*ngIf="nameField.dirty && nameField.hasError('maxlength')"
Genial armando esta también es una maravillosa técnica y es totalmente valida, una de las razones por que las a veces no uso dirty es que el usuario puede no terminar de digitar un campo y ya le estoy mostrando error, por ejemplo en un correo, puede que el usuario vaya a la mitad y ya le estoy diciendo que esta en un error.
Para este caso en especial totalmente de acuerdo. En otros casos, no es tan buena opción empezando por lo que dice Nicolás
Para mostrar errores angular material nos provee de la etiqueta mat-error.
<div> <mat-form-field> <input matInput placeholder="Ingresa tu nombre aqui" [formControl]="nameField" required> <mat-error *ngIf="nameField.hasError('required')">Este campo es requerido</mat-error> </mat-form-field> <button mat-raised-button color="primary" [disabled]="nameField.invalid" (click)="getNameValue()">Get value</button> </div>
Este curso es bastante increible
para un FormGroup
<button [disabled]="myForm.invalid " type="submit">Registrar</button>
Deberían quitarle el tag de avanzado a este curso porque por lo menos hasta ahora esta siendo demasiado básico y leeeeeeeeeeeento para los que ya son usuarios avanzados.
Una pequeña duda, el código me funciona bien pero me marca error en el llamado de [formControl] en los tags, dice que no esto importando el reactiveFormsModule pero si lo estoy importando. El código me compila perfectamente y funciona bien. Pero marca el subrayado en rojo.
Este curso es increíble
Una pregunta en caso que quiera que un campo reciba texto pero no espacios en blanco como se podría validad? Gracias
Tengo duda, estoy usando minLength como validador para un Input de tipo number, pero no funciona hay alguna forma para poderlo utilizar? O es mejor utilizar pattern?
number:['',Validators.minLength(7)]
get numberField(){ return this.formCustomsValue.get('number'); }
<input matInput formControlName="number" /><mat-error *ngIf="number?.hasError('minlength')"></mat-error>
Holis, ¿todavía tenés el problema?
https://github.com/jasorglez/angularFormswithPlatzi/branches rama cap10AplicavalidacionesFormControl