遍历包含formarrays的表单组

时间:2018-10-11 10:06:19

标签: angular angular-reactive-forms formarray formgroups

我正在创建具有以下结构的动态模型驱动表单:

export class AppComponent {

  data = {
    companies: [
      {
        company: "example comany",
        projects: [
          {
            projectName: "example project",
          }
        ]
      }
    ]
  }

  myForm: FormGroup;

  constructor(private fb: FormBuilder) {
    this.myForm = this.fb.group({
      companies: this.fb.array([])
    })

    this.setCompanies();
  }

  setCompanies() {
    let control = <FormArray>this.myForm.controls.companies;
    this.data.companies.forEach(x => {
      control.push(this.fb.group({ 
        company: x.company, 
        projects: this.setProjects(x) }))
    })
  }

  setProjects(x) {
    let arr = new FormArray([])
    x.projects.forEach(y => {
      arr.push(this.fb.group({ 
        projectName: y.projectName 
      }))
    })
    return arr;
  }
}

下面是模型结构,在其中可观察到的是我从后端接收的数据:

export class Companies{
company : String;
companyRegNo : String;
projects : Project[];
}
export class Project{
projectName : String;
projectRegNo : String;
}

我的“ myForm” FormGroup变量中有一些json数据,其中包含公司和projectName的信息。我需要在此json中进行一些更新,但可以使用原始的myForm json数据。

因此,我正在创建另一个FormGroup变量myForm2并为其分配myForm值:

myForm2: FormGroup;
this.myForm2 = this.myForm;

现在,我希望将company的值替换为companyRegNo的值,并将projectName的值替换为projectRegNo的值,同时保持键companyprojectName保留在myForm2中。

我已经有2种方法,getProjectRegNoFromProjectName()getCompanyRegNoFromCompanyName()可以使用,在通过projectRegNo和{{1时,它们返回companyRegNoprojectName }} 分别。我需要在myForm2上进行迭代时同时调用这两种方法。 我现在如何才能迭代company数据本身,以便如上所述更新已分配的属性和myForm2的值?

2 个答案:

答案 0 :(得分:0)

您尝试使用patchValue吗? 像这样:

(<any>Object).values(formGroup.controls).forEach(control => {
      control.patchValue(value);
//Patch Your value here}

答案 1 :(得分:0)

您可以在嵌套表单数组上引用我的这个简单示例。

https://stackblitz.com/edit/nested-form-array-example?embed=1&file=src/app/app.component.ts

随时询问是否有疑问。