Angular 多个复选框以动态反应形式显示在角度

Angular 多个复选框以动态反应形式显示在角度,angular,angular-reactive-forms,Angular,Angular Reactive Forms,我有一个场景,其中配置来自服务器,这意味着表单是由来自服务器的配置生成的;与输入类型、标签等类似,文本字段、复选框、选择选项和单选按钮也是由服务器响应动态生成的 但是,当复选框有多个值(例如:js、PHP、python)时,我无法正确地得到它。因为我已经在一个循环中创建了formControl,所以不管checkbox中有多少个选项,我总是从checkbox form control获得一个输出。 我试过formArray,但没有得到我想要的结果 // ts const group =

我有一个场景,其中配置来自服务器,这意味着表单是由来自服务器的配置生成的;与输入类型、标签等类似,文本字段、复选框、选择选项和单选按钮也是由服务器响应动态生成的

但是,当复选框有多个值(例如:js、PHP、python)时,我无法正确地得到它。因为我已经在一个循环中创建了
formControl
,所以不管checkbox中有多少个选项,我总是从checkbox form control获得一个输出。 我试过
formArray
,但没有得到我想要的结果

// ts    

const group = {};
this.category.header.forEach(input => {
  group[input.id] = new FormControl('');
});
this.myFormGroup = new FormGroup(group);

// html

<form [formGroup]="myFormGroup" (ngSubmit)="onSubmit()">
  <div *ngFor="let form_elem of category.header">
  <div [ngSwitch]="form_elem.type">
    <div *ngSwitchCase="'text'">
      <input type="text" formControlName="{{form_elem.id}}"/>
    </div>
    <div *ngSwitchCase="'radio'">
        <div *ngFor="let item of form_elem.options">
            <input type="radio" [value]='item' formControlName="{{form_elem.id}}" >
        </div>
    </div>
    <div *ngSwitchCase="'select'">
      <select formControlName="{{form_elem.label}}">
        <option *ngFor="let opt of form_elem.options">
          {{opt}}
        </option>
      </select>
    </div>
    <div *ngSwitchCase="'checkbox'">
        <div *ngFor="let item of form_elem.options">
            <input type="checkbox" [value]='item' formControlName="{{form_elem.id}}">
        </div>
    </div>
  </div>  
</div>
  <input type="submit" value="save"/>
</form>
//ts
常量组={};
this.category.header.forEach(输入=>{
组[input.id]=新表单控件(“”);
});
this.myFormGroup=新表单组(组);
//html
{{opt}}
我希望我的checkbox属性是这样的


复选框:
[{option1:true},{option2:false}]

您可以尝试这些方法,但您需要在某处检查复选框的条件

    this.category.header.forEach(input => {
        if(input.type == 'checkbox'){
            let opts = {};
            for (let opt of input.options) {
                opts[opt.key] = new FormControl(opt.value);
            }
            group[input.id] = new FormGroup(opts)
        }else{
            group[input.id] = new FormControl('');
        }
    });

您可以尝试这些方法,但您需要在某处选中复选框的条件

    this.category.header.forEach(input => {
        if(input.type == 'checkbox'){
            let opts = {};
            for (let opt of input.options) {
                opts[opt.key] = new FormControl(opt.value);
            }
            group[input.id] = new FormGroup(opts)
        }else{
            group[input.id] = new FormControl('');
        }
    });

@kuklyy this.category.header是一个对象数组,例如,这个数组的一个元素如下:{id:“some_id”,label:“input_label”选项:['js',php',node']type:“checkbox”}你能添加一个最小的复制示例吗?在stackblitz或…@kuklyy this.category.header上是一个对象数组,例如,该数组的一个元素如下:{id:“some_id”,label:“input_label”选项:['js',php',node']type:“checkbox”}您能添加一个最小的复制示例吗?关于闪电战或。。。