【发布时间】:2017-04-21 22:45:56
【问题描述】:
问题来了:
我有一个带有嵌套表单组的复杂表单,这是一个“简化”的结构:
-> 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([...])],
})
])
...
});
从根 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"
感谢阅读/帮助
这里有一些代码:
【问题讨论】:
-
formArrayName 需要在 formGroupName 的包装元素中。
-
还有这里的野兽
myForm.controls.whateverGroup01.controls.whateverArray01.controls可以浓缩成myForm.get('whateverGroup.whateverArray'). -
另外我认为 FormArray 需要有相同的嵌套 FormGroups。
-
嗨!感谢 cmets,formArray 中的我的 formGroups 都具有相同的结构。这不会是一个问题。我不明白您在第一条评论中的意思...
-
在你上面的例子中不一样。我的意思是你在同一个元素中声明 formArrayName 和 formGroupName 。将 formArrayName 移动到更高的元素。
标签: javascript html angular typescript angular2-forms