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.

  1. 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.

  1. 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);
  }
}

  1. 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 i maxlength: Defineixen la longitud mínima i màxima del camp.
<input type="text" id="name" name="name" ngModel required minlength="3">

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>

  1. Accés a les dades del formulari

Pots accedir a les dades del formulari utilitzant la referència del formulari en la plantilla.

<p>Nom: {{ userForm.value.name }}</p>
<p>Email: {{ userForm.value.email }}</p>

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

Mòdul 2: Conceptes bàsics de TypeScript

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

Mòdul 9: Gestió d'estat

Mòdul 10: Proves en Angular

Mòdul 11: Temes avançats

Mòdul 12: Desplegament i millors pràctiques

© Copyright 2024. Tots els drets reservats