1
  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在代码中使用。

是否可以仅使用formchild1获得它?谢谢

4

2 回答 2

0

我意识到这是嵌套对象问题。所以我创建了一个简化的问题,并从@dave那里得到了答案。

但在这种情况下,你不能用它typeof来决定 isControl还是ControlGroup,我从@thierry-templier得到了答案。所以你需要改变一点代码。

所以他最终的工作版本:

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);
于 2016-02-22T18:09:16.090 回答
0

你可以试试这个来获得子控件child1

var child1Controls = this.form.controls.childForm1.controls;

事实上,该group方法返回一个ControlGroup元素:

于 2016-02-22T06:36:05.183 回答