我遇到以下问题,我想将patchValue转换为角反应形式 我使用以下代码:
export function clearArray(formArray: FormArray) {
while (formArray.controls.length) {
removeAtIndex(formArray, 0);
}
}
export function makeArrayForm(
formArray: FormArray,
modelGroup: AbstractControl,
data: any[] = []
) {
clearArray(formArray);
let index = 0;
do {
formArray.push(modelGroup);
index++;
} while (index < data.length);
}
export function bindData(
formArray: FormArray,
modelGroup: AbstractControl,
data: any[] = []
) {
makeArrayForm(formArray, modelGroup, data);
formArray.patchValue(data);
}
模型组是由FormBuilder在与之对应的地方创建的,在此我将该函数称为 我尝试添加以下数组
[
{{id:1, name:{Jonny}},
{{id:2, name:{Tonny}}
]
在调用bindData值之后,我的表单数组被数组的最后一个元素填充是什么问题。 我在哪里弄错了?
答案 0 :(得分:0)
我解决了。问题在于模型组是对象。 对象通过对函数的引用传递,因此modelGroup被重复多次。 解决方案
export function makeArrayForm(
formArray: FormArray,
formCreatorFunction: (FormBuilder) => FormGroup,
formBuilder: FormBuilder,
dateArray: any[] = []
) {
clearArray(formArray);
dateArray.forEach(() => {
const newForm = formCreatorFunction(formBuilder);
formArray.push(newForm);
});
}