如何获得儿童形式的元素?

时间:2016-02-22 03:02:33

标签: angular angular2-forms

  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来获取它?感谢

2 个答案:

答案 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);