J'ai donc un formulaire qui contient des informations de base sur la famille. Ensuite, je veux avoir une partie du formulaire à ajouter aux enfants de la famille. J'utilise des formes réactives, qui ressemble à quelque chose comme ceci:Entrées de groupe de formes dynamiques angulaires
this.details = fb.group({
firstName: ['', Validators.required],
lastName: ['', Validators.required],
email: ['', Validators.compose([Validators.required, Validators.email])],
phone: ['', Validators.required]
});
Maintenant, à un moment donné dans l'interface utilisateur, il y aura des entrées pour les noms des enfants, avec la possibilité d'ajouter plus. Puis-je ajouter par programmation plusieurs champs de saisie au groupe this.details
?
Mise à jour
@ réponse de navigation privée est parfaite pour la question initiale, j'ai demandé. Il restera la réponse sélectionnée. Tout en creusant sa réponse, j'ai aussi trouvé FormArray, qui est la direction dans laquelle j'ai fini, donc je voulais ajouter ça ici. Il ressemble à:
this.form = this.fb.group({
...
children: this.fb.array([
this.fb.group({
name: ['', Validators.required],
age: ['', Validators.required],
gender: ['', Validators.required]
})
])
});
Ensuite, le point de vue ressemble à:
<form [formGroup]="form">
<div *ngFor="let child of form.controls.children.controls; let i = index;"
formArrayName="children"
class="childForm">
<div [formGroupName]="i"
class="row">
<div class="col-md-4">
<input type="text"
class="form-control"
formControlName="name">
</div>
<div class="col-md-4">
<input type="number"
class="form-control"
formControlName="age">
</div>
<div class="col-md-4">
<select class="form-control"
formControlName="gender">
<option value="male">Male</option>
<option value="female">Female</option>
</select>
</div>
</div>
</div>
<button (click)="addChild()"
class="btn btn-primary">
<i class="fa fa-plus"></i> Add Another Child
</button>
</form>
Et la fonction addChild
référencé sur le bouton en bas de la forme ressemble à:
addChild() {
const children = <FormArray>this.form.get('children');
children.push(this.fb.group({
name: [''],
age: [''],
gender: ['']
}));
}
Alors , encore une fois, c'est une façon différente d'y arriver, et je ne l'ai découverte qu'après avoir trouvé la réponse de @ incognito. Merci @ incognito!
Exactement ce que je cherchais. Merci @incognito! – Greg
Pour ce que ça vaut, cette réponse m'a permis de découvrir FormArray, qui permet une section répétitive basée sur les contrôles du parent formGroup. Le rendu des champs n'est pas requis dynamiquement. Cette réponse répond certainement à ma question initiale, mais je voulais mentionner FormArray comme une autre façon d'y remédier. Merci encore! – Greg
Merci pour le partage @Greg! Je vais vérifier. Je suppose que FormArray serait plus efficace. –