如何在表单中绑定嵌套对象?
How to bind nested object within Form?
我以这种方式将从 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*?
对于 'ingredienti',您将拥有另一个表单组。像
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-container 一起使用,因为它不会呈现给 dom)。
我以这种方式将从 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*?
对于 'ingredienti',您将拥有另一个表单组。像
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-container 一起使用,因为它不会呈现给 dom)。