Angular 2 表单生成器嵌套 json 无法迭代对象
Angular 2 form builder nested json can't iterate the object
我有 json 看起来像这样:
{
"name": "",
"effective_date": null,
"expiry_date": null,
"id": 1,
"contacts": [
{
"id": 1
},
{
"id": 2
},
{
"id": 4
},
{
"id": 5
}
]}
我正在尝试使用它来填充表单。
这是我的控件:
this.form = fb.group({
'name': [''],
'effective_date': [''],
'expiry_date': [''],
'id': [''],
'contacts': fb.array([
fb.group({
'id': ['']
})
])}]
然后在我的模板中,我尝试像这样遍历联系人:
<form [formGroup]="form" (ngSubmit)="onSubmit(form.value)" class="form-horizontal">
...
<div formArrayName="contacts">
<div *ngFor="let contact of form.controls.contacts.controls; let i=index">
<div [formGroupName]="i">
<div>
<label>Contact ID</label>
<input type="text" class="form-control" [(ngModel)]="contacts" formControlName="id" placeholder="">
</div>
</div>
</div>
</div>
...
我确实在屏幕上输入了联系人 ID,但只有 1,我在控制台中收到错误无法在索引 1 处找到表单控件。另外,如果我查看 form.controls.contacts.controls.length,我会得到 1,并且不是 4. 我发现的示例主要是嵌套字符串数组。如何将表单生成器与嵌套对象一起使用?
原来我需要为数组中的每个对象准备一个控件。我只需要用这样的循环添加它们:
for (let entry of this.myJson.contacts) {
const control = <FormArray>this.form.controls['contacts'];
control.push(this.initContacts());
}
initContacts() {
// initialize our contact
return this._fb.group({
id: ['']
});
}
在我设置表单数据之前
this.form.setValue(this.myJson);
砰!
我有 json 看起来像这样:
{
"name": "",
"effective_date": null,
"expiry_date": null,
"id": 1,
"contacts": [
{
"id": 1
},
{
"id": 2
},
{
"id": 4
},
{
"id": 5
}
]}
我正在尝试使用它来填充表单。
这是我的控件:
this.form = fb.group({
'name': [''],
'effective_date': [''],
'expiry_date': [''],
'id': [''],
'contacts': fb.array([
fb.group({
'id': ['']
})
])}]
然后在我的模板中,我尝试像这样遍历联系人:
<form [formGroup]="form" (ngSubmit)="onSubmit(form.value)" class="form-horizontal">
...
<div formArrayName="contacts">
<div *ngFor="let contact of form.controls.contacts.controls; let i=index">
<div [formGroupName]="i">
<div>
<label>Contact ID</label>
<input type="text" class="form-control" [(ngModel)]="contacts" formControlName="id" placeholder="">
</div>
</div>
</div>
</div>
...
我确实在屏幕上输入了联系人 ID,但只有 1,我在控制台中收到错误无法在索引 1 处找到表单控件。另外,如果我查看 form.controls.contacts.controls.length,我会得到 1,并且不是 4. 我发现的示例主要是嵌套字符串数组。如何将表单生成器与嵌套对象一起使用?
原来我需要为数组中的每个对象准备一个控件。我只需要用这样的循环添加它们:
for (let entry of this.myJson.contacts) {
const control = <FormArray>this.form.controls['contacts'];
control.push(this.initContacts());
}
initContacts() {
// initialize our contact
return this._fb.group({
id: ['']
});
}
在我设置表单数据之前
this.form.setValue(this.myJson);
砰!