Les formulaires pilotés par le template sont simples et intuitifs, surtout pour les débutants. Ils reposent principalement sur le template HTML pour définir le formulaire et ses validations.
FormsModule
dans votre module.ngModel
et ngForm
.<form #myForm="ngForm" (ngSubmit)="onSubmit(myForm)">
<label for="name">Nom :</label>
<input type="text" id="name" name="name" ngModel required>
<div *ngIf="myForm.submitted && !myForm.controls.name?.valid">
Le nom est requis.
</div>
<label for="email">Email :</label>
<input type="email" id="email" name="email" ngModel required email>
<div *ngIf="myForm.submitted && !myForm.controls.email?.valid">
Un email valide est requis.
</div>
<button type="submit">Soumettre</button>
</form>
Les formulaires réactifs offrent plus de contrôle et de flexibilité, surtout pour les formulaires complexes. Ils sont basés sur une approche pilotée par le modèle en utilisant des objets dans le composant TypeScript.
ReactiveFormsModule
dans votre module.FormBuilder
, FormGroup
, et FormControl
.formGroup
et formControlName
.// Composant TypeScript
myForm: FormGroup;
constructor(private fb: FormBuilder) {}
ngOnInit(): void {
this.myForm = this.fb.group({
name: ['', Validators.required],
email: ['', [Validators.required, Validators.email]]
});
}
onSubmit(): void {
if (this.myForm.valid) {
console.log('Données du formulaire : ', this.myForm.value);
}
}
// Template HTML
<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
<label for="name">Nom :</label>
<input type="text" id="name" formControlName="name">
<div *ngIf="myForm.get('name')?.invalid && myForm.get('name')?.touched">
Le nom est requis.
</div>
<label for="email">Email :</label>
<input type="email" id="email" formControlName="email">
<div *ngIf="myForm.get('email')?.invalid && myForm.get('email')?.touched">
Un email valide est requis.
</div>
<button type="submit" [disabled]="myForm.invalid">Soumettre</button>
</form>
Aspect | Formulaires pilotés par le template | Formulaires réactifs |
---|---|---|
Approche | Déclarative (template HTML) | Impérative (composant TypeScript) |
Cas d'utilisation | Formulaires simples | Formulaires complexes |
Contrôle | Moins de contrôle | Plus de contrôle |
Validation | Basée sur le template | Basée sur le code |
Flexibilité | Moins flexible | Plus flexible |