FormArray est une variante de FormGroup. La principale différence est que ses données sont sérialisées en tant que tableau (par opposition à être sérialisées en tant qu'objet dans le cas de FormGroup). Cela peut être particulièrement utile lorsque vous ne savez pas combien de contrôles seront présents dans le groupe, comme les formulaires dynamiques.
Laissez-moi essayer de vous expliquer par un exemple rapide. Disons que vous avez un formulaire dans lequel vous capturez la commande d'un client pour Pizza. Et vous placez un bouton pour leur permettre d'ajouter et de supprimer toute demande spéciale. Voici la partie html du composant:
<section>
<p>Any special requests?</p>
<ul formArrayName="specialRequests">
<li *ngFor="let item of orderForm.controls.specialRequests.controls; let i = index">
<input type="text" formControlName="{{i}}">
<button type="button" title="Remove Request" (click)="onRemoveSpecialRequest(i)">Remove</button>
</li>
</ul>
<button type="button" (click)="onAddSpecialRequest()">
Add a Request
</button>
</section>
et voici la classe de composant définissant et gérant les demandes spéciales:
constructor () {
this.orderForm = new FormGroup({
firstName: new FormControl('Nancy', Validators.minLength(2)),
lastName: new FormControl('Drew'),
specialRequests: new FormArray([
new FormControl(null)
])
});
}
onSubmitForm () {
console.log(this.orderForm.value);
}
onAddSpecialRequest () {
this.orderForm.controls
.specialRequests.push(new FormControl(null));
}
onRemoveSpecialRequest (index) {
this.orderForm.controls['specialRequests'].removeAt(index);
}
FormArray offre plus de flexibilité que FormGroup dans le sens où il est plus facile de manipuler FormControls en utilisant "push", "insert" et "removeAt" qu'en utilisant "addControl", "removeControl", "setValue", etc. correctement suivi dans la hiérarchie du formulaire.
J'espère que cela t'aides.
Afin de créer un formulaire réactif, un parent
FormGroup
est indispensable. CelaFormGroup
peut en outre contenirformControls
, enfantformGroups
ouformArray
FormArray
peut en outre contenir un tableau deformControls
ou unformGroup
lui - même.Quand devrions-nous utiliser formArray?
Veuillez lire ce bel article qui explique l'utilisation de
formArray
L'exemple intéressant de ce blog concerne les voyages
formGroup
La structure des voyages
formGroup
utilisantformControl
etformArray
ressemblerait à quelque chose comme:N'oubliez pas de jouer avec cette DEMO , et notez l'utilisation du tableau pour
cities
etplaces
d'un voyage.la source
Tiré de: Livre d'Anton Moiseev «Développement angulaire avec Typescript, deuxième édition». :
Lorsque vous devez ajouter (ou supprimer) par programme des contrôles à un formulaire , utilisez FormArray . Il est similaire à FormGroup mais a une variable de longueur . Alors que FormGroup représente un formulaire entier ou un sous-ensemble fixe des champs d'un formulaire , FormArray représente généralement une collection de contrôles de formulaire qui peuvent augmenter ou diminuer .
Par exemple, vous pouvez utiliser FormArray pour permettre aux utilisateurs de saisir un nombre arbitraire d'e-mails.
la source
De la documentation angulaire, vous pouvez voir que
Laissez-moi vous montrer leur exemple et essayer d'expliquer comment je comprends cela. Vous pouvez voir la source ici
Imaginez un formulaire avec les champs suivants
Ici , nous avons
firstName
,lastName
,address
etaliases
Tous les champs ensemble sont un groupe de formulaire pour que nous envelopper toutgroup
. En même temps,address
c'est comme un sous-groupe donc nous l'enveloppons dans un autregroup
(vous pouvez regarder le modèle pour une meilleure compréhension)! Tous les contrôles de formulaire ici,key
saufaliases
et cela signifie que vous pouvez y insérer des valeurs autant que vous le souhaitez, comme un simple tableau en utilisant desformBuilder
méthodes commepush
.C'est comme ça que je le comprends, j'espère que ça aide quelqu'un.
la source