【发布时间】:2021-04-10 02:52:46
【问题描述】:
这是我的StackBlitz Demo App的链接
我正在尝试使用 FormBuilder array() 方法动态添加输入字段。
要清楚地了解我的ngOnInit() 和相关方法
stackForm: FormGroup;
get work(): FormArray {
return this.stackForm.get('work') as FormArray;
}
get highlights(): FormArray {
return this.stackForm.get('work.highlights') as FormArray;
}
ngOnInit() {
this.stackForm = new FormGroup({
'work': this.fb.array([this.buildWork()])
})
}
buildWork(): FormGroup {
return this.fb.group({
company: '',
position: '',
summary: '',
highlights: this.fb.array([this.buildHighlights()])
});
}
buildHighlights(): FormControl {
return new FormControl()
}
HTML 实现是这样的:
<div formArrayName="highlights">
<div [formGroupName]="j"
*ngFor="let hg of highlights.controls; let j=index">
<!-- input element -->
</div>
</div>
但我在控制台上收到此错误消息,并且我的输入字段未显示。
ERROR 错误:ctx_r0.highlights 为空
更新:感谢@Lotte-Lemmens,帮助我解决了null 问题。
但是,我在加载时看不到文本框。也许是因为它是空的,我如何从组件中传递一个空值,以便它循环一次,我也可以看到文本框。
更新:感谢@Eldar,我现在可以看到文本框,并添加更多新亮点。在更新的 StackBlitz 上,添加 hightlight 时更新 stackForm 的值仍然存在问题。当我点击新高亮并添加新高亮时,不会在stackForm.value 的highlights 数组中添加值,只添加第一个值。
但如果我编辑第一个亮点(要重新创建此问题,请先添加多个亮点),所有其他亮点都会立即添加到数组中。
谢谢。
【问题讨论】:
标签: angular angular-reactive-forms