Cours Angular Form
Cours Angular Form
Achref El Mouelhi
[Link]@[Link]
Angular
Définition : Un formulaire
H I ©
EL
un outil graphique que nous créons avec le langage de description
HTML
M OU
il permet à l’utilisateur de E
f L des données
saisir
e
r une autre page, vers une base de
chvers
©
données...
A
et de les envoyer
Angular
Angular
I ©
Template-driven forms : utilisant FormsModule, facile et conseillé
H
pour les formulaires simples
UEL
O
f E LM
Reactive forms basé sur ReactiveFormsModule : robuste,
évolutif et conçu pour les applications nécessitant des contrôles
particuliers
ch r e
©A
Form Group
Form Builder
Angular
Un évènement
action appliquée par l’utilisateur ou simulée par le développeur sur
un .[Link]
H I ©
EL
un évènement déclenché ⇒ une méthode, dans le
.[Link] associé, exécutée
O U
f E LM
ch r e
©A
Angular
Un évènement
action appliquée par l’utilisateur ou simulée par le développeur sur
un .[Link]
H I ©
EL
un évènement déclenché ⇒ une méthode, dans le
.[Link] associé, exécutée
O U
f E LM
ch r e
Pour commencer ©A
créer un composant formulaire
créer un chemin /formulaire permettant d’afficher ce
composant
Angular
©A
OnInit {
constructor() { }
ngOnInit() {
}
}
Angular
Le fichier [Link] Le fichier
[Link]
import { Component, OnInit } from ’@angular/
core’; <div>
<button (click)="
@Component({
selector: ’app-formulaire’,
H I ©
direBonjour()">
cliquer
templateUrl: ’./[Link]’
,
UEL </button>
</div>
O
LM
styleUrls: [’./[Link]’]
})
e f E
export class FormulaireComponent implements
r
OnInit {
ch
constructor() { }©A
ngOnInit() { }
direBonjour(): void {
[Link](’Bonjour’);
}
}
Angular
(eventBinding)
H I ©
UEL
O
f E LM
ch r e
©A
Angular
(eventBinding)
H I ©
Explication
U EL
M O
E L la méthode direBonjour()
En cliquant sur le bouton cliquer,
f
est exécutée.
c h re
Bonjour ©estAaffiché dans la console
Angular
(eventBinding)
H I ©
Explication
U EL
M O
E L la méthode direBonjour()
En cliquant sur le bouton cliquer,
f
est exécutée.
c h re
Bonjour ©estAaffiché dans la console
EL
styleUrls: [’./[Link]’] value)">
})
export class FormulaireComponent implements
O U cliquer
</button>
OnInit {
result = "";
f E LM </div>
<div>
constructor() { }
ch r e Bonjour {{ result }}
©A
</div>
ngOnInit() { }
direBonjour(nom:string){
[Link] = nom;
}
}
#nom est une variable locale contenant les attributs de cet élément HTML. Les variables locales
peuvent être utilisées avec tout élément HTML, <p>, <h>...
Angular
H I ©
Remarque
UEL
O
LM
Il est possible de simplifier le code précédant en utilisant le two
way binding
r e f E
ch
©A
Angular
Plusieurs formes de binding
c h re
récupérer des valeurs passées .[Link]
©A
Angular
Plusieurs formes de binding
c h re
récupérer des valeurs passées .[Link]
Angular
Angular
Angular
Nouveau contenu d’[Link]
H I ©
EL
@NgModule({
declarations: [
AppComponent,
O U
AdresseComponent,
PersonneComponent,
f E LM
FormulaireComponent
ch r e
©A
],
imports: [
BrowserModule,
FormsModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
LM
OnInit { </div>
nom = "";
result = "";
r e f E <div>
Bonjour {{ result }}
constructor() { }
ch </div>
ngOnInit() { }
direBonjour(){
©A
[Link] = [Link];
}
}
Nous n’avons pas besoin de cliquer pour envoyer la valeur saisie dans le champ texte, elle est
mise à jour simultanément dans la classe quand elle est modifiée dans la vue.
H & H: Research and Training 15 / 75
Template-driven forms Liaison (binding) bidirectionnelle
Angular
@Component({
H ©
<input type=text [(
I
ngModel)]=nom>
selector: ’app-formulaire’,
U EL
</div>
templateUrl: ’./[Link]’
O <div>
LM
, Bonjour {{ nom }}
})
r e f E
styleUrls: [’./[Link]’] </div>
ch
export class FormulaireComponent implements
©A
OnInit {
nom = "";
constructor() { }
ngOnInit() { }
}
Angular
Commençons par créer une interface personne
H I ©
U EL
O
f E LM
ch r e
©A
Angular
Commençons par créer une interface personne
H I ©
On peut aussi utiliser le raccourci
U EL
O
LM
ng g i interfaces/personne
r e f E
ch
©A
Angular
Commençons par créer une interface personne
H I ©
On peut aussi utiliser le raccourci
U EL
O
LM
ng g i interfaces/personne
r e f E
ch
©A
Mettons à jour le contenu de [Link]
export interface Personne {
id?: number;
nom?: string;
prenom?: string;
}
Angular
Considérant le formulaire [Link]
<form>
<div>
Nom : <input type=text name=nom [(ngModel)]=[Link]>
</div>
<div>
H I ©
EL
Prénom : <input type=text name=prenom [(ngModel)]=personne.
prenom>
O U
LM
</div>
<div>
<button>
r e f E
ch
©A
Ajouter
</button>
</div>
</form>
Angular
Considérant le formulaire [Link]
<form>
<div>
Nom : <input type=text name=nom [(ngModel)]=[Link]>
</div>
<div>
H I ©
EL
Prénom : <input type=text name=prenom [(ngModel)]=personne.
prenom>
O U
LM
</div>
<div>
<button>
r e f E
ch
©A
Ajouter
</button>
</div>
</form>
Pour utiliser ngModel dans un formulaire, il faut définir une valeur pour l’attribut
name de chaque élément du formulaire.
Angular
Le fichier [Link]
import { Component, OnInit } from ’@angular/core’;
import { Personne } from ’../../interfaces/personne’;
@Component({
selector: ’app-formulaire’,
H I ©
templateUrl: ’./[Link]’,
U EL
O
LM
styleUrls: [’./[Link]’]
})
r e f E
export class FormulaireComponent implements OnInit {
ch
©A
personne: Personne = { };
constructor() { }
ngOnInit() { }
}
Angular
Angular
Commençons par rendre les deux zones textes obligatoires
<form>
<div>
Nom : <input type=text name=nom [(ngModel)]=personne.
nom required>
H I ©
</div>
U EL
<div>
O
f E LM
Prénom : <input type=text name=prenom [(ngModel)]=
</div>
[Link] required>
ch r e
<div>
<button> ©A
Ajouter
</button>
</div>
</form>
Angular
Désactivons le bouton
<form>
<div>
Nom : <input type=text name=nom [(ngModel)]=personne.
nom required>
H I ©
</div>
U EL
<div>
O
f E LM
Prénom : <input type=text name=prenom [(ngModel)]=
</div>
[Link] required>
ch r e
<div>
©A
<button disabled>
Ajouter
</button>
</div>
</form>
Angular
f E LM
ch r e
©A
Angular
f E LM
ch r e
©A
Avec les directivesAngular, il y a plus simple
Angular
Pour le réactiver
<form #monForm=ngForm>
<div>
Nom : <input type=text name=nom [(ngModel)]=personne.
nom required>
H I ©
</div>
U EL
<div>
O
f E LM
Prénom : <input type=text name=prenom [(ngModel)]=
[Link] required>
</div>
ch r e
<div>
©A
<button [disabled]=![Link]>
Ajouter
</button>
</div>
</form>
Angular
Angular
Utilisons les variables locales et affichons les classes CSS associées attribuées
par Angular
<form #monForm=ngForm>
<div>
Nom : <input type=text name=nom [(ngModel)]=[Link]
required #nom>
H I ©
</div>
U EL
{{ [Link]}}
O
<div>
f E LM
Prénom : <input type=text name=prenom [(ngModel)]=personne.
ch
prenom required #prenom> r e
©A
</div>
{{ [Link]}}
<div>
<button [disabled]=![Link]>
ajouter
</button>
</div>
</form>
Angular
©
ng-invalid A : classe Angular appliquée quand le champ n’est
pas valid (son inverse est ng-valid)
Angular
<form #monForm=ngForm>
<div>
Nom : <input type=text name=nom [(ngModel)]=[Link]
required #nom>
H I ©
</div>
U EL
<div>
O
prenom required #prenom>
f E LM
Prénom : <input type=text name=prenom [(ngModel)]=personne.
</div>
ch r e
©A
<div>
<button [disabled]=![Link]>
ajouter
</button>
</div>
</form>
Angular
Angular
On peut aussi afficher un message en cas de violation de contrainte
<form #monForm=ngForm>
<div>
Nom : <input type=text name=nom [(ngModel)]=[Link] required
#nom="ngModel">
</div>
<div [hidden]="[Link]">
H I ©
Le nom est obligatoire
</div>
U EL
O
LM
<div>
required #prenom="ngModel">
r e E
Prénom : <input type=text name=prenom [(ngModel)]=[Link]
f
</div>
ch
©A
<div [hidden]="[Link]">
Le prénom est obligatoire
</div>
<div>
<button [disabled]=![Link]>
ajouter
</button>
</div>
</form>
Angular
Pour ne pas afficher les messages d’erreur au chargement de la page
<form #monForm=ngForm>
<div>
Nom : <input type=text name=nom [(ngModel)]=[Link] required #
nom="ngModel">
</div>
<div [hidden]="[Link] || [Link]">
H I ©
Le nom est obligatoire
</div>
U EL
O
LM
<div>
required #prenom="ngModel">
r e E
Prénom : <input type=text name=prenom [(ngModel)]=[Link]
f
</div>
ch
©A
<div [hidden]="[Link] || [Link]">
Le prénom est obligatoire
</div>
<div>
<button [disabled]=![Link]>
ajouter
</button>
</div>
</form>
Angular
Pour soumettre un formulaire, on utilise la directive ngSubmit
<form #monForm=ngForm (ngSubmit)=ajouterPersonne()>
<div>
Nom : <input type=text name=nom [(ngModel)]=[Link] required #
nom="ngModel">
</div>
<div [hidden]="[Link] || [Link]">
H I ©
Le nom est obligatoire
</div>
U EL
O
LM
<div>
required #prenom="ngModel">
r e E
Prénom : <input type=text name=prenom [(ngModel)]=[Link]
f
</div>
ch
©A
<div [hidden]="[Link] || [Link]">
Le prénom est obligatoire
</div>
<div>
<button [disabled]=![Link]>
ajouter
</button>
</div>
</form>
Angular
Le fichier [Link]
import { Component, OnInit } from ’@angular/core’;
import { Personne } from ’../../interfaces/personne’;
@Component({
selector: ’app-formulaire’,
templateUrl: ’./[Link]’,
H I ©
EL
styleUrls: [’./[Link]’]
})
O U
LM
export class FormulaireComponent implements OnInit {
personnes: Array<Personne> = [];
personne: Personne = { };
r e f E
ch
©A
constructor() { }
ngOnInit(): void { }
ajouterPersonne(): void {
[Link]({ ...[Link] });
[Link] = ’’;
[Link] = ’’;
[Link]([Link]);
}
}
H & H: Research and Training 33 / 75
Template-driven forms Soumission de formulaire
Angular
Exercice 1
H I ©
Modifier le composant formulaire pour afficher les personnes
EL
ajoutées en-dessous du formulaire
M OU
f
À chaque ajout, la nouvelleE L
personne ajoutée apparaı̂t comme
ch
dernier élément de r
laeliste des personnes (affichée en-dessous du
formulaire) A
©
Angular
Exercice 2
Créez un composant calculette (n’oubliez pas de lui associer
H I ©
une route calculette)
U EL
M O
Dans [Link],
f E L boutonsdéfinissez deux champs
input de type number
h r e et quatre : un pour chaque
© Ac
opération arithm étique
Le résultat sera affiché en-dessous du formulaire.
Angular
Pour commencer
H I ©
créer un composant form
UEL
O
f E LM
créer un chemin /form permettant d’afficher ce composant
ch r e
ajouter ReactiveFormsModule dans la section imports de
[Link]
©A
Angular
FormControl
H I ©
Une classe Angular
U EL
O
LM
Permettant d’associer un attribut de composant à un champ de
r e f E
formulaire défini dans le template associé afin de faciliter
le binding
ch
©A
le contrôle et la validation
Angular
Dans [Link], déclarons un attribut nom de type FormControl
@Component({
selector: ’app-form’,
H I ©
templateUrl: ’./[Link]’,
U EL
styleUrls: [’./[Link]’]
O
})
f E LM
ch r e
export class FormComponent implements OnInit {
A
nom = new FormControl(’’);
©
constructor() { }
ngOnInit() { }
}
Angular
Dans [Link], on ajoute un champ associé à l’attribut nom
<div>
Nom :
<input type="text" [formControl]="nom">
</div>
H I ©
U EL
O
f E LM
ch r e
©A
Angular
Dans [Link], on ajoute un champ associé à l’attribut nom
<div>
Nom :
<input type="text" [formControl]="nom">
</div>
H I ©
U EL
O
f E LM
On peut ajouter un bouton avec un event binding
<label>
ch r e
©A
Nom :
<input type="text" [formControl]="nom">
</label>
<button (click)=’afficherNom()’>cliquer</button>
Angular
Dans [Link], on ajoute un champ associé à l’attribut nom
<div>
Nom :
<input type="text" [formControl]="nom">
</div>
H I ©
U EL
O
f E LM
On peut ajouter un bouton avec un event binding
<label>
ch r e
©A
Nom :
<input type="text" [formControl]="nom">
</label>
<button (click)=’afficherNom()’>cliquer</button>
@Component({
selector: ’app-form’,
templateUrl: ’./[Link]’,
styleUrls: [’./[Link]’]
H I ©
})
U EL
O
export class FormComponent implements OnInit {
f
nom = new FormControl(’’);E LM
constructor() { c}h
r e
© {}
ngOnInit():
A
void
afficherNom(): void {
[Link]([Link]);
}
}
@Component({
selector: ’app-form’,
templateUrl: ’./[Link]’,
styleUrls: [’./[Link]’]
H I ©
})
U EL
export class FormComponent implements OnInit {
O
f
nom = new FormControl(’’);E LM
constructor() { c}h
r e
© {}
ngOnInit():
A
void
afficherNom(): void {
[Link]([Link]);
}
}
En cliquant sur le bouton, la valeur saisie dans le champ texte sera affichée dans la
console.
H & H: Research and Training 40 / 75
Reactive forms FormControl
@Component({
selector: ’app-form’,
templateUrl: ’./[Link]’,
H I ©
styleUrls: [’./[Link]’]
U EL
})
O
f E LM
export class FormComponent implements OnInit {
ch r
nom = new FormControl(’wick’); e
©A
constructor() { }
ngOnInit() { }
afficherNom() {
[Link]([Link]);
}
}
Angular
FormGroup H I ©
U EL
Une classe Angular O
f E LM
Composée de plusieurs objets de type FormControl
ch r e
©A
@Component({
selector: ’app-form’,
templateUrl: ’./[Link]’,
H I ©
styleUrls: [’./[Link]’]
U EL
})
O
f E LM
export class FormComponent implements OnInit {
ch r
personneForm = new FormGroup({ e
©A
id: new FormControl(’’),
nom: new FormControl(’’),
prenom: new FormControl(’’)
});
constructor() { }
ngOnInit(): void { }
}
Angular
Dans [Link], créons maintenant le formulaire
prenant les trois éléments déclarés dans le FormGroup
<form [formGroup]="personneForm">
<div>
Identifiant :
H I ©
<input type="number" formControlName="id">
U EL
</div>
O
<div>
f E LM
Nom :
ch r e
©A
<input type="text" formControlName="nom">
</div>
<div>
Prénom :
<input type="text" formControlName="prenom">
</div>
</form>
H & H: Research and Training 44 / 75
Reactive forms FormGroup
Angular
On peut ajouter un bouton avec un event binding
<form [formGroup]="personneForm">
<div>
Identifiant :
<input type="number" formControlName="id">
</div>
H I ©
<div>
U EL
Nom :
O
</div>
f E LM
<input type="text" formControlName="nom">
<div>
ch r e
©A
Prénom :
<input type="text" formControlName="prenom">
</div>
<button (click)=’afficherTout()’>cliquer</button>
</form>
Angular
On peut ajouter un bouton avec un event binding
<form [formGroup]="personneForm">
<div>
Identifiant :
<input type="number" formControlName="id">
</div>
H I ©
<div>
U EL
Nom :
O
</div>
f E LM
<input type="text" formControlName="nom">
<div>
ch r e
©A
Prénom :
<input type="text" formControlName="prenom">
</div>
<button (click)=’afficherTout()’>cliquer</button>
</form>
Angular
Dans [Link], ajoutons la méthode afficherTout()
import { Component, OnInit } from ’@angular/core’;
import { FormControl, FormGroup } from ’@angular/forms’;
@Component({
selector: ’app-form’,
templateUrl: ’./[Link]’,
H I ©
EL
styleUrls: [’./[Link]’]
})
O U
LM
export class FormComponent implements OnInit {
©A
nom: new FormControl(’’),
prenom: new FormControl(’’)
});
constructor() { }
ngOnInit(): void { }
afficherTout(): void {
[Link]([Link]);
}
}
H & H: Research and Training 46 / 75
Reactive forms FormGroup
Angular
H I ©
U EL
O
f E LM
ch r e
©A
Angular
H I ©
EL
Ou aussi
M OU
f E L
[Link]([Link](’nom’));
chr e
© A
Angular
H I ©
EL
Ou aussi
M OU
f E L
[Link]([Link](’nom’));
chr e
© A
Pour vider les champs d’un formulaire
[Link]();
@Component({
selector: ’app-form’,
templateUrl: ’./[Link]’,
styleUrls: [’./[Link]’]
})
H I ©
EL
export class FormComponent implements OnInit {
constructor() { }
ngOnInit() {
[Link]({nom: ’wick’, prenom: ’john’, id: 1});
}
afficherTout() {
[Link]([Link]);
}
}
H & H: Research and Training 48 / 75
Reactive forms FormGroup
@Component({
selector: ’app-form’,
templateUrl: ’./[Link]’,
styleUrls: [’./[Link]’]
})
H I ©
EL
export class FormComponent implements OnInit {
constructor() { }
ngOnInit() {
[Link](change => {
[Link](change);
});
}
afficherTout() { [Link]([Link]); }
}
H & H: Research and Training 49 / 75
Reactive forms Soumission de formulaire
Angular
Pour la soumission de formulaire, on ajoute un event binding (ngSubmit) et on
ajoute un bouton de type submit
Angular
Pour la validation de formulaire, on commence par désactiver le bouton tant que
le formulaire n’est pas valide
<form [formGroup]="personneForm" (ngSubmit)=’afficherTout()’>
<div>
Identifiant :
<input type="number" formControlName="id">
H I ©
</div>
U EL
<div>
O
Nom :
f E LM
<input type="text" formControlName="nom">
</div>
ch r e
©A
<div>
Prénom :
<input type="text" formControlName="prenom">
</div>
<button type=’submit’ [disabled]=’![Link]’>
Envoyer
</button>
</form>
Angular
Le champ nom est obligatoire est doit respecter une expression régulière qui exige que la
première soit en majuscule est que le nombre de caractère soit entre 3 et 11.
Le champ prenom est aussi obligatoire et doit respecter une fonction (qu’on a préparée
pour ça) appelée checkPrenomValidator.
Angular
La fonction checkPrenomValidator()
function checkPrenomValidator(control: FormControl):
object | null {
H I ©
const str: string = [Link];
U EL
O
LM
if (str[0] >= ’A’ && str[0] <= ’Z’) {
return null;
r e f E
} else {
ch
} ©A
return { erreur: ’Prénom non valide’ };
Angular
Pour afficher les messages d’erreurs
©
<div *ngIf="id?.invalid && (id?.dirty || id?.touched)">
<div *ngIf="id?.errors?.required">L’identifiant est obligatoire</div>
H I
EL
</div>
<div>
Nom :
<input type="text" formControlName="nom">
O U
LM
</div>
e E
<div *ngIf="nom?.invalid && (nom?.dirty || nom?.touched)">
f
<div *ngIf="nom?.errors?.required">Le nom est obligatoire</div>
r
ch
<div *ngIf="nom?.errors?.pattern">Première lettre en majuscule et min 3 lettres max 11<
/div>
©A
</div>
<div>
Prénom :
<input type="text" formControlName="prenom">
</div>
<div *ngIf="prenom?.invalid && (prenom?.dirty || prenom?.touched)">
<div *ngIf="prenom?.errors?.required">Le prénom est obligatoire</div>
<div *ngIf="prenom?.errors?.erreur">Première lettre en majuscule</div>
</div>
<button type=’submit’ [disabled]=’![Link]’>Envoyer</button>
</form>
Angular
Angular
Remarque
H I ©
EL
OU
Il est possible d’imbriquer les FormGroup
M
E Ladresse défini dans le FormGroup
Par exemple : un FormGroup
f
personne
chr e
© A
@Component({
selector: ’app-form’,
templateUrl: ’./[Link]’,
styleUrls: [’./[Link]’]
})
H I ©
EL
export class FormComponent implements OnInit {
personneForm = new FormGroup({
O U
LM
id: new FormControl(’’),
nom: new FormControl(’’),
prenom: new FormControl(’’),
r e f E
ch
adresse: new FormGroup({
©A
rue: new FormControl(’’),
ville: new FormControl(’’),
codePostal: new FormControl(’’)
})
});
constructor() { }
ngOnInit() { }
afficherTout() { [Link]([Link]); }
}
©A
</div>
<div>
Ville : <input type="text" formControlName="ville">
</div>
<div>
Code postal : <input type="text" formControlName="codePostal">
</div>
</div>
<button type=’submit’>Envoyer</button>
</form>
H & H: Research and Training 59 / 75
Reactive forms FormGroup imbriqué
Angular
Remarque
H I ©
EL
La méthode setValue() permet d’initialiser, ou modifier les
U
O
valeurs de formulaire : il faut préciser une valeur pour chaque
FormControl du FormGroup
f E LM
ch r e
La méthode patchValue() permet d’initialiser, ou modifier
©A
quelques (ou tous les) FormControl du FormGroup
Angular
Angular
Angular
FormBuilder
H I ©
Une classe service défini par Angular
U EL
O
f E LM
Donc, pour l’utiliser, il faut l’injecter dans le constructeur
ch r e
Il permet de simplifier la construction d’un formulaire en évitant les
©A
répétitions de FormControl
@Component({
selector: ’app-form’,
templateUrl: ’./[Link]’,
styleUrls: [’./[Link]’]
H I ©
EL
})
export class FormComponent implements OnInit {
personneForm = [Link]({
O U
id: [null],
nom: [’doe’],
f E LM
ch r e
prenom: [’’, [[Link], [Link](2)]],
©A
adresse: [Link]({
rue: [’’],
ville: [’’],
codePostal: [’’]
}),
});
constructor(private fb: FormBuilder) { }
ngOnInit(): void { }
afficherTout(): void { [Link]([Link]); }
}
H & H: Research and Training 63 / 75
Reactive forms FormBuilder
©A
</div>
<div>
Ville : <input type="text" formControlName="ville">
</div>
<div>
Code postal : <input type="text" formControlName="codePostal">
</div>
</div>
<button [disabled]=’![Link]’>Envoyer</button>
</form>
H & H: Research and Training 64 / 75
Reactive forms FormBuilder
Angular
O U
LM
<div>
état : {{ [Link] }}
r e f E
ch
</div>
©A
Angular
Exercice
H I ©
EL
Modifier le composant builder pour afficher les personnes
ajoutées en-dessous du formulaire
M OU
f
À chaque ajout, la nouvelleE L
personne ajoutée apparaı̂t comme
ch
dernier élément de r
laeliste des personnes (affichée en-dessous du
formulaire) A
©
Angular
Exercice H I ©
U EL
O
Ajoutez un bouton supprimer pour chaque personne affichée.
f E LM
ch r e
En cliquant sur le bouton, la personne associée sera supprimée.
©A
Angular
FormArray
H I ©
EL
Défini dans FormBuilder
O U
Il permet de définir un tableau de taille indéterminée de
FormControl
f E LM
Une personne c r e
h pratiquer plusieurs sports (le nombre peut
peut
©
varier d’une
A
personne à une autre) ⇒ on peut utiliser FormArray
Angular
Dans [Link], définissons notre FormArray
personneForm = [Link]({
id: [null],
nom: [’doe’],
prenom: [’’, [[Link], Validators.
H I ©
minLength(2)]],
U EL
O
LM
adresse: [Link]({
rue: [’’],
r e f E
ville: [’’],
ch
}), ©A
codePostal: [’’]
sports: [Link]([
[Link](’’)
])
});
Angular
Angular
Dans [Link], ajoutons notre FormArray à notre
formulaire précédent
<div formArrayName="sports">
<h3>Sports </h3>
<button type=button (click)="ajouterSport()">
H I ©
Ajouter sport
U EL
O
LM
</button>
f E
<div *ngFor="let sport of [Link]; let i=
r e
index">
ch
<div>
Sport : ©A
<input type="text" [formControlName]="i">
</div>
</div>
</div>
Angular
Angular
Angular
Exercice H I ©
U EL
O
Ajoutez un bouton supprimer pour chaque sport.
f E LM
ch r e
En cliquant sur le bouton, le sport associé sera supprimé.
©A
Angular
H I ©
Remarque
U EL
O
LM
FormArray est une classe qui peut être aussi utilisée dans un
FormGroup
r e f E
ch
©A
Angular
Exercice
Dans un nouveau composant, créer un formulaire qui permet à
H I ©
une personne de saisir son nom, son prénom ainsi qu’un tableau
de commentaire de taille variable.
U EL
O
LM
Chaque commentaire est composé d’un titre, un contenu et une
catégorie.
r e f E
surc
En cliquant A h les données saisies sont affichées en
Ajouter,
©
bas du formulaire et le formulaire est vidé.
Aucun champ ne doit être vide à l’ajout, les nom et prénom
doivent commencer par une lettre majuscule.