Els formularis basats en plantilles en Angular són una manera senzilla i declarativa de crear i gestionar formularis. Utilitzen directives Angular per vincular el formulari HTML amb el model de dades de l'aplicació. Aquest mètode és ideal per a formularis senzills i ràpids de configurar.
Objectius d'aquest tema
- Entendre què són els formularis basats en plantilles.
- Aprendre a crear un formulari basat en plantilles.
- Validar formularis utilitzant validacions integrades i personalitzades.
- Gestionar l'enviament de formularis i l'accés a les dades del formulari.
- Introducció als formularis basats en plantilles
Els formularis basats en plantilles utilitzen directives Angular per vincular el formulari HTML amb el model de dades. Aquest enfocament és més declaratiu i menys programàtic que els formularis reactius.
Avantatges
- Simplicitat: Ideal per a formularis senzills.
- Declaratiu: La major part de la lògica es defineix en la plantilla HTML.
Desavantatges
- Escalabilitat: Pot ser menys adequat per a formularis complexos.
- Testabilitat: Més difícil de provar en comparació amb els formularis reactius.
- Creació d'un formulari basat en plantilles
Pas 1: Configuració del mòdul
Primer, assegura't d'importar FormsModule
en el mòdul de l'aplicació.
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 { }
Pas 2: Creació del formulari en la plantilla
A continuació, crea el formulari en la plantilla HTML del component.
<!-- app.component.html --> <form #userForm="ngForm" (ngSubmit)="onSubmit(userForm)"> <div> <label for="name">Nom:</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>
Pas 3: Gestió de l'enviament del formulari
Defineix la lògica per gestionar l'enviament del formulari en el component TypeScript.
// app.component.ts 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('Form Data: ', form.value); } }
- Validació de formularis
Validacions integrades
Angular proporciona diverses directives de validació integrades que es poden utilitzar en els formularis basats en plantilles.
required
: Assegura que el camp no estigui buit.email
: Valida que el camp contingui una adreça de correu electrònic vàlida.minlength
imaxlength
: Defineixen la longitud mínima i màxima del camp.
Validacions personalitzades
Per crear una validació personalitzada, es pot utilitzar la directiva ngModel
amb una funció de validació.
// app.component.ts import { Component } from '@angular/core'; import { NgModel } from '@angular/forms'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { validateName(control: NgModel): { [key: string]: boolean } | null { const name = control.value; if (name && name.length < 3) { return { 'nameInvalid': true }; } return null; } }
<input type="text" id="name" name="name" ngModel #name="ngModel" [ngModelOptions]="{ updateOn: 'blur' }" [ngModel]="validateName(name)"> <div *ngIf="name.errors?.nameInvalid">El nom ha de tenir almenys 3 caràcters.</div>
- Accés a les dades del formulari
Pots accedir a les dades del formulari utilitzant la referència del formulari en la plantilla.
Exercici pràctic
Objectiu
Crea un formulari de registre d'usuari que inclogui camps per al nom, correu electrònic i contrasenya. Afegeix validacions per assegurar que tots els camps són obligatoris i que la contrasenya té almenys 6 caràcters.
Solució
<!-- app.component.html --> <form #registerForm="ngForm" (ngSubmit)="onRegister(registerForm)"> <div> <label for="username">Nom d'usuari:</label> <input type="text" id="username" name="username" ngModel required> </div> <div> <label for="email">Email:</label> <input type="email" id="email" name="email" ngModel required email> </div> <div> <label for="password">Contrasenya:</label> <input type="password" id="password" name="password" ngModel required minlength="6"> </div> <button type="submit" [disabled]="registerForm.invalid">Registrar</button> </form>
// app.component.ts import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { onRegister(form: any): void { console.log('Form Data: ', form.value); } }
Conclusió
Els formularis basats en plantilles són una manera senzilla i eficient de crear formularis en Angular. Utilitzant directives Angular, pots vincular fàcilment el formulari HTML amb el model de dades de l'aplicació, afegir validacions i gestionar l'enviament del formulari. Aquest mètode és ideal per a formularis senzills i ràpids de configurar. En el següent tema, explorarem els formularis reactius, que ofereixen més control i flexibilitat per a formularis més complexos.
Curs d'Angular 2+
Mòdul 1: Introducció a Angular
- Què és Angular?
- Configuració de l'entorn de desenvolupament
- La teva primera aplicació Angular
- Arquitectura d'Angular
Mòdul 2: Conceptes bàsics de TypeScript
- Introducció a TypeScript
- Variables i tipus de dades en TypeScript
- Funcions i funcions fletxa
- Classes i interfícies
Mòdul 3: Components i plantilles
Mòdul 4: Directives i pipes
Mòdul 5: Serveis i injecció de dependències
Mòdul 6: Enrutament i navegació
Mòdul 7: Formularis en Angular
Mòdul 8: Client HTTP i observables
- Introducció al client HTTP
- Realització de sol·licituds HTTP
- Gestió de respostes HTTP
- Ús d'observables