【发布时间】:2020-06-25 13:15:14
【问题描述】:
我在 FormArray 的帮助下构建动态表单时遇到了麻烦,我正在尝试基于包含描述数据库行的对象的数组构建表单。目标是向用户显示他选择的每一行及其当前值,让用户修改它们并将它们发回。
所以一切都需要模块化,因为我不知道他选择的行数也不知道表的列数,而且我仍然需要能够检索新数据。
我设法做了一些应该有效的事情,但我仍然有一个错误:
Error : Cannot find control with name: 'XXXXX'
我觉得这可能是关于 lifeCycleHook 的故事,并且在 typescript 中设置控件之前,html 正在以某种方式执行。
我首先创建了一个名为 modifyForm 的 formArray 和一个 formBuilder
modifyForm: FormArray;
constructor private fb: FormBuilder){}
然后在我的 ngOnInit 函数中,我创建了一个循环,用正确的控件填充 modifyForm 并填充 HTML 将用于创建用户界面的 externalArray。
打字稿:
ngOnInit() {
let internalObjects = {}
for (let i = 0; i < this.selectedRows.length; i++) {
const row = this.selectedRows[i];
internalObjects = {}
for (let y = 0; y < Object.keys(row).length; y++) {
const key = Object.keys(row)[y];
const value = Object.values(row)[y];
if (key !== "#") {
this.modifyForm.push(this.fb.control(i + key))
internalObjects[key] = value;
}
}
this.externalArray.push(internalObjects)
}
}
}
HTML:
<form [formGroup]="modifyForm">
<div *ngFor="let object of externalArray; let item = index ">
<div *ngFor="let value of object | keyvalue">
<mat-form-field>
<input matInput [formControlName]='item+value.key' [value]='value.value'>
</mat-form-field>
</div>
</div>
</form>
奇怪的是,在 ngOnInit 函数结束时,我在控制台记录了它似乎使用正确值创建的控件,但它仍然说找不到它们。
打字稿循环:
for (const control of this.modifyForm.controls) {
console.log(control.value)
}
结果:
我知道要消化的内容很多,我试图提供尽可能多的信息,我希望它不会太难阅读。我一直在寻找几天,我仍然被困在这里。感谢任何可以提供帮助的人! :)
【问题讨论】:
标签: angular forms angular8 formarray dynamic-forms