Retour au cours

RF : Utilisation de FormGroup et FormArray

Le Développeur Angular Complet : de Zéro à Héros

46. RF : Utilisation de FormGroup et FormArray

Les formulaires complexes nécessitent de regrouper des contrôles. FormGroup et FormArray sont des conteneurs qui agrègent plusieurs instances de FormControl.

1. FormGroup (Groupement de contrôles)

FormGroup suit la valeur et le statut de validation d'une collection d'instances FormControl. La valeur globale du formulaire est un objet de paires clé-valeur.

Configuration dans la classe du composant

Nous utilisons le service FormBuilder (injectable) pour simplifier la création de structures imbriquées.

typescript import { FormBuilder, FormGroup, Validators } from '@angular/forms';

export class ProfileFormComponent { profileForm: FormGroup;

constructor(private fb: FormBuilder) { this.profileForm = this.fb.group({ firstName: ['', Validators.required], lastName: [''], address: this.fb.group({ // FormGroup imbriqué street: [''], city: ['', Validators.required] }) }); } }

Liaison dans le template

Nous lions le FormGroup du composant à l'élément <form> via [formGroup] puis nous mappons les contrôles avec formControlName.

html

<button type="submit" [disabled]="profileForm.invalid">Sauvegarder

2. FormArray (Listes dynamiques)

FormArray gère une collection de contrôles (ou de groupes) dont le nombre est variable (ex : liste de numéros de téléphone, liste dynamique de compétences).

typescript this.profileForm = this.fb.group({ // ... autres contrôles skills: this.fb.array([this.fb.control('Angular')]) });

// Méthode pour ajouter un nouveau contrôle dynamiquement addSkill() { (this.profileForm.get('skills') as FormArray).push(this.fb.control('')); }

// Template pour afficher les compétences //

// <input *ngFor="let ctrl of skills.controls; let i=index" [formControlName]="i"> //