Forms 如何将新的FormGroup或FormControl附加到窗体

Forms 如何将新的FormGroup或FormControl附加到窗体,forms,angular,angular2-forms,angular2-formbuilder,Forms,Angular,Angular2 Forms,Angular2 Formbuilder,我使用FormBuilder创建了以下表单: constructor(private fb: FormBuilder) { this.myForm = fb.group({ 'name': ['', [Validators.required], 'surname': ['', [Validators.required], 'email': ['', [validateEmail]], 'address': fb.group(

我使用
FormBuilder
创建了以下
表单

constructor(private fb: FormBuilder) {
    this.myForm = fb.group({
        'name': ['', [Validators.required],
        'surname': ['', [Validators.required],
        'email': ['', [validateEmail]],
        'address': fb.group({
            'street': [''],
            'housenumber': [''],
            'postcode': ['']
        }, { validator: fullAddressValidator })
    });
}
是否存在以编程方式将新字段(如
FormControl
或new
FormGroup
添加到
myForm
)的方法


我的意思是,如果我想按需或在某些条件下添加新字段,如何将项添加到在
构造函数中第一次创建的相同表单中?

您可以根据

因此,您可以执行以下操作:

this.myForm.addControl('newcontrol',[]);

在我看来,你可以使用一个中间变量来达到这个目的。请看下一个示例:

  constructor(private fb: FormBuilder) {
    let group = {
      'name': ['', [Validators.required]],
      'surname': ['', [Validators.required]],
      'email': ['', [Validators.required]]
    };

    let middlename = true;

    if(middlename) {
      group['middlename'] = ['', [Validators.required]];
    }

      this.myForm = fb.group(group);
    }

另外,最好在ngOnInit钩子中传输表单初始化,而不是组件构造函数。

补充@ranakrunal9所说的内容

如果要将验证程序与addControl一起使用,请执行以下操作:

this.myForm.addControl('newControl', new FormControl('', Validators.required));
只是别忘了添加以下导入

import {FormControl} from "@angular/forms";
对addControl的引用:


对FormControl的引用:

我也有同样的问题,但是由于我在主FormGroup中已经有一个空的FormGroup
{}
,我可以像这样附加FormControl:

(this.myForm.get("form_group_name") as FormGroup).addControl("item1", new FormControl("default val"));

这是我的第一个实现,但我更喜欢使用@ranakrunal9的解决方案。无论如何,为什么在ngOnInit钩子中创建表单更好?Boris Siscanu:你能告诉我为什么在ngOnInit中而不是构造函数中启动表单更好吗?Angular文档说在组件构造函数中启动表单:我遇到了这个问题,在使用循环时必须导入FormArray并像这样添加它:this.myForm.addControl(i,new FormArray([]);类似地,您也可以使用FormGroup来添加Objectshow在formgroup@lpradhap您以相同的方式添加它。例如,this.myForm.addControl('newcontrol',this.fb.group({…})),我得到类型为'undefined[]的Typescript
参数“”不可分配给“AbstractControl”类型的参数。当我分配时,类型“undefined[]”中缺少属性“validator”
this@CodyBugstein=>this.myForm.addControl('newControl',newFormControl('',Validators.required));这也有助于: