这是问题所在:
我有一个带有嵌套表单组的复杂表单,这里是一个“简化”的结构:
-> MyForm (formGroup)
-> Whatever01 (formControl - input)
-> Whatever02 (formControl - input)
-> WhateverGroup01 (formGroup)
-> Whatever03 (formControl - input)
-> Whatever04 (formControl - input)
-> WhateverArray01 (formArray)
-> WhateverGroup02 (formGroup)
-> Whatever05 (formControl - input)
-> WhateverGroup03 (formGroup)
-> Whatever06 (formControl - input)
-> WhateverGroup04 (formGroup)
-> Whatever07 (formControl - input)
-> ...
角度方面,它应该看起来像这样(不正确/完整,但只是给出一个想法):
this.myForm = this.fb.group({
whatever01: ['',Validators.compose([...])],
whatever02: ['',Validators.compose([...])],
whateverGroup01: this._formBuilder.group({
whatever03: ['',Validators.compose([...])],
whatever04: ['',Validators.compose([...])]
}),
whateverArray01: this._formBuilder.array([
this._formBuilder.group({
whatever05: ['',Validators.compose([...])],
whateverGroup03: this._formBuilder.group({
whatever06: ['',Validators.compose([...])]
})
}),
this._formBuilder.group({
whatever07: ['',Validators.compose([...])],
})
])
...
});
从root myForm项目到获取formArray的事情变得非常好,但随后出现麻烦....
所以,我只是无法访问“whatever05”(和06但05不起作用......所以......)formControl将它绑定到模板!这是模板实际看起来的样子(在数组之前有意地跳过了部分),有趣的部分是[????] =“????”,这实际上就是问题 .
<form [formGroup]="myForm" ...>
<!-- ...skipped... -->
<div formArrayName="whateverArray01" *ngFor="let item of myForm.controls.whateverGroup01.controls.whateverArray01.controls;let idx = index;" [formGroupName]="idx">
<div [????]="????">
<input formControlName="whatever05" ... />
<div [????]="????">
<input formControlName="whatever06" ... />
</div>
</div>
</div>
</form>
位于formArray中的formGroups具有完全相同的结构 .
基本上,问题是我无法访问formGroups中的formControls ...
我尝试了几个解决方案,我使用[formGroupName],formGroupName(没有括号),[formGroup],formControlName,...但是无法弄清楚我必须使用哪些能够将相应的formGroup / formControl与数据绑定!
我现在遇到这种错误:
formGroup expects a FormGroup instance. Please pass one in.
// This when using [formGroup]="item.whateverGroup02"
Cannot find control with name: 'whatever05'
// When using [formGroup]="item.controls.whateverGroup02"
Cannot find control with path: 'whateverArray01 -> 0 ->'
// This when using [formGroupName]="whateverGroup02"
感谢您的阅读/帮助
这是一个带有一些代码的plunker:
2 回答
你的表单构建似乎对我来说是正确的 . 您的模板有问题,
FormArray
的迭代不正确,FormArray
不在FormGroup
WhateverGroup01
内,因此迭代应如下所示:至于
FormArray
的模板部分,它应该如下所示:那应该解决问题:)
这是一个
演示
首先,您的视图绑定错误:
组件中没有
whateverGroup02
属性 . 我们应该传递字符串如下:然后,如果你 Build 组像:
你会得到
这意味着如果你想操纵嵌套的formGroups,你必须创建它们 . 即
Plunker Example