Пример, который Akber Iqbal ссылается на в своем комментарии, делает то, что вы хотите с FormBuilder. Может быть легче увидеть, как типы совпадают без FormBuilder, хотя. FormControl
представляет фактический элемент формы (input, textarea и т. Д.) В html. FormGroup
и FormArray
оба являются контейнерами, которые содержат сочетание FormGroups, FormArrays и / или FormControls. Когда вы создаете FormGroup или FormArray, вы передаете начальные дочерние элементы управления.
Ниже родительской FormGroup, employeeForm, содержит FormArray. Я добавлю два дочерних элемента FormControl по умолчанию в FormArray:
employeeForm: FormGroup;
nameArray: FormArray;
ngOnInit(){
this.nameArray = new FormArray([
new FormControl('name1'),
new FormControl('name2')
]);
this.employeeForm = new FormGroup({
employeeNameArray: this.nameArray
});
}
В шаблоне вы должны иметь возможность перебирать дочерние элементы FormArray
<tr *ngFor="let employeeName of nameArray.controls; let i=index">
<td>Name: <input type="text" [formControlName]="i"></td>
</tr>
Если вы хотите иметь несколько элементов формы на одного сотрудника (один для имени и один для адреса, например), вам, вероятно, понадобится еще один слой вложенности, где непосредственными потомками FormArray являются FormGroups, каждый из которых затем содержит имя FormControl и адрес FormControl.