首页 > 解决方案 > 遍历包含表单数组的表单组

问题描述

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

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

标签: angularangular-reactive-formsformarrayformgroups

解决方案


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

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

推荐阅读