Introducción
Los formularios basados en plantillas en Angular son una forma declarativa de crear y gestionar formularios. Utilizan directivas de Angular en el HTML para crear y validar formularios de manera sencilla y eficiente. Este enfoque es ideal para formularios simples y medianos.
Objetivos
- Comprender la diferencia entre formularios basados en plantillas y formularios reactivos.
- Aprender a crear formularios utilizando directivas de Angular.
- Implementar validaciones básicas en formularios basados en plantillas.
- Manejar el envío de formularios y la captura de datos.
Conceptos Clave
- Directivas de Angular: Utilizadas para enlazar el formulario HTML con el modelo de datos.
- NgModel: Directiva que permite el enlace bidireccional de datos.
- ngForm: Directiva que agrupa todos los controles de formulario.
- Validaciones: Reglas aplicadas a los campos del formulario para asegurar la entrada de datos correcta.
Creación de un Formulario Basado en Plantillas
Paso 1: Configuración del Módulo
Primero, asegúrate de que FormsModule esté importado en tu módulo principal o en el módulo donde deseas utilizar formularios basados en plantillas.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, FormsModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }Paso 2: Creación del Formulario en el Componente
En el archivo de plantilla HTML de tu componente, crea un formulario utilizando las directivas de Angular.
<form #userForm="ngForm" (ngSubmit)="onSubmit(userForm)">
<div>
<label for="name">Nombre:</label>
<input type="text" id="name" name="name" ngModel required>
</div>
<div>
<label for="email">Email:</label>
<input type="email" id="email" name="email" ngModel required email>
</div>
<button type="submit" [disabled]="userForm.invalid">Enviar</button>
</form>Paso 3: Manejo de Datos en el Componente
En el archivo TypeScript del componente, define el método onSubmit para manejar el envío del formulario.
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
onSubmit(form: any): void {
console.log('Formulario enviado:', form.value);
}
}Validaciones en Formularios Basados en Plantillas
Validaciones Básicas
Angular proporciona varias directivas para validaciones básicas como required, minlength, maxlength, pattern, etc.
<div>
<label for="password">Contraseña:</label>
<input type="password" id="password" name="password" ngModel required minlength="8">
<div *ngIf="userForm.controls['password']?.invalid && userForm.controls['password']?.touched">
<small *ngIf="userForm.controls['password']?.errors?.required">La contraseña es obligatoria.</small>
<small *ngIf="userForm.controls['password']?.errors?.minlength">La contraseña debe tener al menos 8 caracteres.</small>
</div>
</div>Validaciones Personalizadas
Puedes crear validaciones personalizadas utilizando directivas.
import { Directive } from '@angular/core';
import { NG_VALIDATORS, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
@Directive({
selector: '[appCustomValidator]',
providers: [{ provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true }]
})
export class CustomValidatorDirective implements Validator {
validate(control: AbstractControl): ValidationErrors | null {
const isValid = /* lógica de validación */;
return isValid ? null : { customError: true };
}
}Ejercicio Práctico
Ejercicio
Crea un formulario de registro con los siguientes campos:
- Nombre (obligatorio)
- Email (obligatorio y debe ser un email válido)
- Contraseña (obligatoria y debe tener al menos 8 caracteres)
- Confirmar Contraseña (debe coincidir con la contraseña)
Solución
<form #registerForm="ngForm" (ngSubmit)="onSubmit(registerForm)">
<div>
<label for="name">Nombre:</label>
<input type="text" id="name" name="name" ngModel required>
</div>
<div>
<label for="email">Email:</label>
<input type="email" id="email" name="email" ngModel required email>
</div>
<div>
<label for="password">Contraseña:</label>
<input type="password" id="password" name="password" ngModel required minlength="8">
</div>
<div>
<label for="confirmPassword">Confirmar Contraseña:</label>
<input type="password" id="confirmPassword" name="confirmPassword" ngModel required [validateEqual]="password">
</div>
<button type="submit" [disabled]="registerForm.invalid">Registrar</button>
</form>import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
onSubmit(form: any): void {
console.log('Formulario de registro enviado:', form.value);
}
}Conclusión
En esta sección, hemos aprendido a crear formularios basados en plantillas en Angular, a implementar validaciones básicas y personalizadas, y a manejar el envío de formularios. Los formularios basados en plantillas son una herramienta poderosa y fácil de usar para gestionar formularios en aplicaciones Angular. En la próxima sección, exploraremos los formularios reactivos, que ofrecen un enfoque más programático y flexible para la gestión de formularios.
Curso de Angular
Módulo 1: Introducción a Angular
- ¿Qué es Angular?
- Configuración del Entorno de Desarrollo
- Arquitectura de Angular
- Primera Aplicación Angular
Módulo 2: Componentes de Angular
- Entendiendo los Componentes
- Creación de Componentes
- Plantillas de Componentes
- Estilos de Componentes
- Interacción entre Componentes
Módulo 3: Enlace de Datos y Directivas
- Interpolación y Enlace de Propiedades
- Enlace de Eventos
- Enlace de Datos Bidireccional
- Directivas Incorporadas
- Directivas Personalizadas
Módulo 4: Servicios e Inyección de Dependencias
- Introducción a los Servicios
- Creación y Uso de Servicios
- Inyección de Dependencias
- Inyectores Jerárquicos
Módulo 5: Enrutamiento y Navegación
Módulo 6: Formularios en Angular
- Formularios Basados en Plantillas
- Formularios Reactivos
- Validación de Formularios
- Formularios Dinámicos
Módulo 7: Cliente HTTP y Observables
- Introducción al Cliente HTTP
- Realizando Solicitudes HTTP
- Manejo de Respuestas HTTP
- Uso de Observables
- Manejo de Errores
Módulo 8: Gestión de Estado
- Introducción a la Gestión de Estado
- Uso de Servicios para la Gestión de Estado
- NgRx Store
- NgRx Effects
- NgRx Entity
Módulo 9: Pruebas en Angular
- Pruebas Unitarias
- Pruebas de Componentes
- Pruebas de Servicios
- Pruebas de Extremo a Extremo
- Simulación de Dependencias
Módulo 10: Conceptos Avanzados de Angular
- Angular Universal
- Optimización del Rendimiento
- Internacionalización (i18n)
- Pipes Personalizados
- Animaciones en Angular
