我正在创建具有以下结构的动态模型驱动表单:
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
的值,同时保持键company
和projectName
保留在myForm2中。
我已经有2种方法,getProjectRegNoFromProjectName()
和getCompanyRegNoFromCompanyName()
可以使用,在通过projectRegNo
和{{1时,它们返回companyRegNo
和projectName
}} 分别。我需要在myForm2上进行迭代时同时调用这两种方法。
我现在如何才能迭代company
数据本身,以便如上所述更新已分配的属性和myForm2
的值?
答案 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
随时询问是否有疑问。