0

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

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;
  }
}

下面是模型结构,在 Observable 中我从后端接收数据:

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

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

因此,我正在创建另一个FormGroup变量myForm2myForm为其赋值:

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

现在,我希望将company值替换为companyRegNo值,并将projectName值替换为projectRegNo值,保持键companyprojectName保持原样,在 myForm2 中。

我已经有 2 种方法,getProjectRegNoFromProjectName()并且getCompanyRegNoFromCompanyName()可以使用,它们分别在传递and时返回projectRegNoand 。我需要在对 myForm2 进行迭代时调用这两种方法。我现在如何迭代数据本身,以便我可以更新分配的属性和值,如前所述?companyRegNoprojectNamecompanymyForm2FormArray

4

2 回答 2

0

您是否尝试过使用 patchValue?就像是 :

(<any>Object).values(formGroup.controls).forEach(control => {
      control.patchValue(value);
//Patch Your value here}
于 2018-10-11T10:22:24.087 回答
-1

您可以在嵌套表单数组中参考我的这个简单示例。

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

如有任何疑问,请随时询问。

于 2018-10-11T10:40:56.973 回答