Вы можете создать empy FormGroup и использовать addControl , чтобы добавить элемент управления с именем свойства
things: this.fb.group({}) //<--a empty formGroup
И в подписке вещей
this.thingService.getThings()
.subscribe(data => {
this.things = data.things;
this.things.forEach(x=>{
(this.myForm.get('things') as FormGroup)
.addControl(x.thingName,this.fb.control(''))
})
});
ПРИМЕЧАНИЕ: в. html у вас есть что-то вроде
<form [formGroup]="myForm">
...
<div formGroupName="things">
<div *ngFor="let thing of things">
<input [formControlName]="thing.thingName">
</div>
</div>
</form>
Update Другое дело, что вы действительно хотите иметь FormArray, вам нужно подумать о вашей базе данных (если вы хотите хранить в базе данных). В этом случае вам нужен только FormArray из FormControls, поэтому сначала вы создаете пустой FormArray
things: this.fb.array([]) //<--a empty formArray
И в подписке вы добавляете в свой formArray столько элементов управления, сколько элементы имеют вещи
this.thingService.getThings()
.subscribe(data => {
this.things = data.things;
this.things.forEach(x=>{
(this.myForm.get('things') as FormArray)
.push(this.fb.control(''))
})
});
И. html как
<form [formGroup]="myForm">
...
<div formArrayName="things">
<div *ngFor="let controls of thingsArray.controls;let i=index">
{{things[i].thingName}}:<input [formControlName]="i">
</div>
</div>
</form>
Используйте геттер для получения массива
get thingsArray()
{
return this.myForm.get('things') as FormArray
}
Я помещаю оба случая в stackblitz -в stackblitz у вас есть myForm и myForm2-