Я привязываю данные, полученные от API, к форме следующим образом:
// json data
export class Recipe {
_id: String;
nome: String;
tipo: Number;
panetti: Number;
}
// ts (load data from API)
this.form = this.fb.group({
nome: [data.nome, [Validators.required]],
tipo: [data.tipo, [Validators.required]],
panetti: [data.panetti, [Validators.required]]
});
// component
<mat-form-field>
<input matInput type = "text" formControlName = "nome">
</mat-form-field>
но как я могу сделать то же самое, если объект становится сложным? Такие как:
// json data
export class Recipe {
_id: String;
nome: String;
tipo: Number;
panetti: Number;
ingredienti: {
newField1: Number,
newField2: Number,
newArray: [
{
arrayField1: Number,
arrayField2: Number
}
];
}
}
как я могу связать в этом случае newField1 и newArray/arrayField*?
Для «ингредиенти» у вас будет другая группа форм. Что-то вроде
this.form = this.fb.group({
nome: [data.nome, [Validators.required]],
tipo: [data.tipo, [Validators.required]],
panetti: [data.panetti, [Validators.required]],
ingredienti: this.fb.group({
newField: ['initialValue'],
secondField: ['initialValue'],
})
});
И если у вас есть поле динамического массива, для «newArray» вы можете использовать FormArray. Посмотрите здесь https://angular.io/api/forms/FormArray.
Изменить для комментария Markzz: В теге формы html вы используете [formGroup]="form". Внутри него (где вы хотите отобразить остальные поля) вы используете «formGroupName». (в идеале использовать с ng-контейнером, потому что он не отображается в доме).
Вы не вставляете другую форму. Вы используете «formGroupName» с именем внутренней группы
Пытался. Он говорит: «Нет экземпляра FormControl, прикрепленного к элементу управления формой с путем:« ingredienti -> acqua »», когда я отменяю выбор ввода
Тогда вы неправильно настраиваете форму. Приведенный выше пример должен работать без проблем.
а для html части? я должен вставить форму в форму? :O не уверен, что это законно...