form: ControlGroup
childForm1: ControlGroup
childForm2: ControlGroup
childForm3: ControlGroup
constructor(fb: FormBuilder) {
this.form = fb.group({
name: [''],
childForm1: fb.group({
child1: [''],
child2: ['']
}),
childForm2: fb.group({
child3: [''],
child4: ['']
}),
childForm3: fb.group({
child5: [''],
child6: ['']
})
});
}
我可以通过两种方式获得name
:
console.log(this.form.find('name'));
console.log(this.form.controls['name']);
但我不能用类似的方法来获取child1
。
我知道一种方式:
for (name in this.childForm1.controls) {
if (name === "child1") {
console.log(this.childForm1.controls[name]);
}
}
但是这仍然在代码中使用childForm1
。
是否可以仅使用form
和child1
来获取它?感谢
答案 0 :(得分:0)
你可以尝试这个来获得child1
的子控件:
var child1Controls = this.form.controls.childForm1.controls;
事实上,group
方法返回ControlGroup
元素:
答案 1 :(得分:0)
我意识到这是嵌套对象的问题。所以我创建了一个简化的问题,并从@dave获得answer。
但是在这种情况下,您无法使用typeof
来决定是Control
还是ControlGroup
,我从@ thierry-templier获得了answer。所以你需要改变一点代码。
所以他最终的工作版本:
getControl(controlName:string, controls:Object): AbstractControl {
for (let i in controls) {
if (controls.hasOwnProperty(i)) {
if (i === controlName) {
return controls[i];
} else if (controls[i] instanceof ControlGroup) {
let control:AbstractControl = this.getControl(controlName, controls[i].controls);
if (typeof(control) !== "undefined") {
return control;
}
}
}
}
}
使用它
let control = this.getControl(this.controlName, this.form.controls);