Вы хотите использовать FormArray
. Объявите форму и в ней объявите formArray
. Затем, когда вы получите данные от службы, создайте столько formControl
s, сколько у вас будет результатов и добавьте их в FormArray
.
у вас есть пример здесь:
https://angular.io/guide/reactive-forms#use-formarray-to-present-an-array-of-formgroups
тип бланка:
yourForm:FormGroup;
определение формы:
this.yourForm = this.fb.group({
yourFormArray: this.fb.array([])
});
сделайте добытчик для вашего formArray
:
get yourFormArray(): FormArray {
return this.cpForm.get('commands') as FormArray;
}
и затем, как только вы получите данные с сервера:
this.yourFormArray.reset();
this.commandKeys.forEach(val =>
this.yourFormArray.push(this.fb.group({ command: [''] }))
);
, который создаст столько команд (без s
) formGroups (имеющих только одно поле input
), сколько у вас ключей в вашем результате commandKeys
.
PS.
как только вы настроите это, вы можете использовать patchValue
на formArray
, чтобы заполнить его фактическими значениями. что-то вроде:
this.myFormArray.patchValue(commandKeys.map(key => ({ command: key })));
PS2.
чтобы очистить элементы управления формы от formarray, вы можете использовать функцию, подобную этой:
//Clear formArray
clearItemsFormArray() {
while (this.yourFormArray.length > 0)
this.yourFormArray.removeAt(0);
}
yourFormArray
- это то, что приходит от getter
.