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次の 2 つの方法で取得できます。

  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か?ありがとう

4

2 に答える 2

0

これはネストされたオブジェクトの問題であることに気付きました。そこで、簡単な質問を作成し、@dave から回答を得ました。

しかし、この場合、 が であるか であるかを判断するために使用することはできません。typeof@ thierry-templier から回答がありました。そのため、コードを少し変更する必要があります。ControlControlGroup

だから彼は最終的な作業バージョン:

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 に答える