Revoir le live Angular du 16 octobre

Anticipez le futur avec Signal Forms d'Angular

Angular 21 introduira Signal Forms, une nouvelle API expérimentale qui simplifiera radicalement la gestion des formulaires.

Basée sur les signaux, elle permettra :

  • de créer des formulaires déclaratifs avec form()
  • de lier directement les champs avec [field]
  • d'intégrer facilement les validations et la soumission
  • et de réduire le boilerplate tout en améliorant les performances
Skip to content

Vous souhaitez recevoir de l'aide sur ce sujet ? rejoignez la communauté Angular.fr sur Discord.

Comment Regrouper des champs d'un formulaire avec ngModelGroup ?

ngModelGroup

Vous remarquez cependant que nous avons une propriété pour chaque champ. Mais quelque fois, nous avons un objet. Par exemple, les données de l'utilisateur récupérées sur le serveur :

js
{first: 'Nancy', last: 'Drew'}

La directive ngModelGroup permet de regrouper des champs dans le formulaire :

ts
import { Component } from '@angular/core';
import { NgForm, FormsModule } from '@angular/forms';

@Component({
  selector: 'app',
  standalone: true,
  imports: [FormsModule],
  template: `
  <form #form="ngForm" (submit)="submit(form)">
      <div ngModelGroup="name">
        <input name="first" [(ngModel)]="name.first">
        <input name="last" [(ngModel)]="name.last">
      </div>
  </form>
  `
})
export class AppComponent {
  result = '';
  name = {first: 'Nancy', last: 'Drew'};

  submit (form: NgForm) { }
}

Nous donnons l'objet name à ngModelGroup et appliquons les propriétés de l'objet aux différents champs. Nous sommes pas obligé d'utiliser ngModelGroup quand nous avons un objet. L'idée de pouvoir vérifier que ce groupe de champs est valide indépendamment du reste du formulaire

html
<form #form="ngForm" (submit)="submit(form)">
      <div ngModelGroup="name" #nameCtrl="ngModelGroup">
        <input name="first" [(ngModel)]="name.first" minlength="2">
        <input name="last" [(ngModel)]="name.last" required>
      </div>
      Valide ? : {{nameCtrl.valid}}
</form>

Il suffit de créer une variable locale nameCtrl et de tester sa propriété valid.