Angular - 将动态创建的FormControls添加到FormGroup中

时间:2017-09-04 11:55:55

标签: angular angular-forms

我有一个简单的列表 - string[]。我为该列表的每个项目生成复选框。然后我创建FormControls:

this.list.map((item) => {
  this.form.addControl(item, new FormControl(false, Validators.required))
})  

但是我想添加一个Validator来控制允许的已选中复选框的数量,所以我假设如果我将FormControls移到FormGroup,我就可以这样做,所以我试试类似的东西:

  constructor(private fb:FormBuilder) { 
        this.form = this.fb.group({
          input1Ctrl: ['', Validators.required],
          input2Ctrl: ['',Validators.required],
          checkboxGroup : new FormGroup({})   
        })         
        this.list.map((item) => {
          this.form.checkboxGroup.addControl(item, new FormControl(false, Validators.required))
        })  

但是这给了:

  

提供的参数与呼叫目标的任何签名都不匹配。   Property' checkboxGroup'类型' FormGroup'。

上不存在

我该怎么做?

2 个答案:

答案 0 :(得分:1)

访问checkboxGroup,例如this.form.controls['checkboxGroup']

  constructor(private fb:FormBuilder) { 
            this.form = this.fb.group({
              input1Ctrl: ['', Validators.required],
              input2Ctrl: ['',Validators.required],
              checkboxGroup : new FormGroup({})   
            })         
            this.list.map((item) => {
              this.form.controls['checkboxGroup'].addControl(item, new FormControl(false, Validators.required))
            })

编辑:为上述

创建了plunker

https://plnkr.co/edit/nxo52y?p=preview

答案 1 :(得分:0)

您在这里使用的是{{imagen}},而不是formBuilder的FormGroup方法。

似乎您将其设置为:

group

访问FormBuilder的this.form = this.fb.group({ checkboxGroup: this.fb.group({}) }) group都对我有用: FormGroup 和 `this.form.controls ['checkboxGroup']

请参见https://angular.io/api/forms/FormBuilder#control