角度反应形式错误的arrayGroup的patchValue

时间:2018-06-27 09:31:38

标签: javascript angular angular-reactive-forms

我遇到以下问题,我想将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值之后,我的表单数组被数组的最后一个元素填充是什么问题。 我在哪里弄错了?

1 个答案:

答案 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);
  });
}