Els formularis basats en plantilles a 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ó.
Objectius d'aquest tema
- Comprendre els conceptes bàsics dels formularis basats en plantilles.
 - Aprendre a crear un formulari basat en plantilles.
 - Validar formularis utilitzant validacions integrades i personalitzades.
 - Gestionar l'estat del formulari i els missatges d'error.
 
Conceptes clau
- Directiva 
ngModel 
ngModelLa directiva ngModel és el cor dels formularis basats en plantilles. Permet la vinculació bidireccional entre el formulari HTML i el model de dades.
- Directiva 
ngForm 
ngFormLa directiva ngForm s'aplica automàticament a qualsevol element <form> i proporciona un objecte de formulari Angular que conté l'estat del formulari i els controls.
- Validacions
 
Angular proporciona diverses validacions integrades com required, minlength, maxlength, pattern, etc. També es poden crear validacions personalitzades.
Crear un formulari basat en plantilles
Pas 1: Configuració del mòdul
Assegura't d'importar el mòdul FormsModule al 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: Crear el formulari HTML
Crea un formulari HTML utilitzant la directiva ngModel per vincular els controls del formulari amb el model de dades.
<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: Gestionar l'enviament del formulari
Afegeix la lògica per gestionar l'enviament del formulari al component.
import { Component } from '@angular/core';
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html'
})
export class AppComponent {
  onSubmit(form: any) {
    console.log('Form Data: ', form.value);
  }
}Validació de formularis
Validacions integrades
Angular proporciona diverses validacions integrades que es poden aplicar directament als controls del formulari.
<div>
  <label for="name">Nom:</label>
  <input type="text" id="name" name="name" ngModel required minlength="3">
  <div *ngIf="userForm.controls.name?.invalid && userForm.controls.name?.touched">
    <small *ngIf="userForm.controls.name?.errors?.required">El nom és obligatori.</small>
    <small *ngIf="userForm.controls.name?.errors?.minlength">El nom ha de tenir almenys 3 caràcters.</small>
  </div>
</div>Validacions personalitzades
Es poden crear validacions personalitzades utilitzant directives Angular.
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ó */;
    return isValid ? null : { customError: true };
  }
}<input type="text" id="custom" name="custom" ngModel appCustomValidator> <div *ngIf="userForm.controls.custom?.errors?.customError">Error personalitzat.</div>
Resum
En aquest tema, hem après a:
- Crear formularis basats en plantilles utilitzant la directiva 
ngModel. - Aplicar validacions integrades i personalitzades als controls del formulari.
 - Gestionar l'estat del formulari i mostrar missatges d'error.
 
Els formularis basats en plantilles són una manera poderosa i senzilla de gestionar formularis a Angular, especialment per a aplicacions petites i mitjanes. En el següent tema, explorarem els formularis reactius, que ofereixen més control i flexibilitat per a aplicacions més complexes.
Curs d'Angular
Mòdul 1: Introducció a Angular
- Què és Angular?
 - Configuració de l'entorn de desenvolupament
 - Arquitectura d'Angular
 - Primera aplicació Angular
 
Mòdul 2: Components d'Angular
- Comprendre els components
 - Crear components
 - Plantilles de components
 - Estils de components
 - Interacció de components
 
Mòdul 3: Enllaç de dades i directives
- Interpolació i enllaç de propietats
 - Enllaç d'esdeveniments
 - Enllaç de dades bidireccional
 - Directives integrades
 - Directives personalitzades
 
Mòdul 4: Serveis i injecció de dependències
Mòdul 5: Enrutament i navegació
Mòdul 6: Formularis a Angular
Mòdul 7: Client HTTP i observables
- Introducció al client HTTP
 - Fer sol·licituds HTTP
 - Gestionar respostes HTTP
 - Utilitzar observables
 - Gestió d'errors
 
Mòdul 8: Gestió d'estat
- Introducció a la gestió d'estat
 - Utilitzar serveis per a la gestió d'estat
 - NgRx Store
 - NgRx Effects
 - NgRx Entity
 
Mòdul 9: Proves a Angular
- Proves unitàries
 - Proves de components
 - Proves de serveis
 - Proves de cap a cap
 - Simulació de dependències
 
Mòdul 10: Conceptes avançats d'Angular
- Angular Universal
 - Optimització del rendiment
 - Internacionalització (i18n)
 - Tubs personalitzats
 - Animacions d'Angular
 
