包含带有角度 FormArray 的单选按钮的 FormGroup [英] FormGroup containing Radio Buttons with an Angular FormArray
问题描述
我有以下代码动态添加包含标题和两个单选按钮的表单组以创建条件,有效地提供其标题以及它是否是可接受的条件:
export enum Acceptability {可以接受,不可接受}导出接口条件{标题:字符串;可接受性:可接受性;}导出类 AddCondition 实现 OnInit {表格:表格组;可接受性 = 可接受性;构造函数(私有 fb:FormBuilder){}ngOnInit() {//构建表单this.form = this.fb.group({条件:this.fb.array([])});}获取条件():FormArray {返回 this.form.get('conditions') 作为 FormArray;}添加条件(){this.conditions.push(this.fb.group({标题: ['', Validators.required],可接受性:['', Validators.required]}));}}
<div *ngFor="let condition of conditions.controls; let i=index" [formGroupName]="i"><input class="form-control" formControlName="title" type="text" placeholder="title"><div class="custom-control custom-radio custom-control-inline"><input type="radio" id="acceptable" formControlName="acceptability" name="acceptability" class="custom-control-input" [value]="ACCEPTABILITY.ACCEPTABLE"><label class="custom-control-label" for="acceptable">Acceptable</label><div class="custom-control custom-radio custom-control-inline"><input type="radio" id="inacceptable" formControlName="acceptability" name="acceptability" class="custom-control-input" [value]="ACCEPTABILITY.INACCEPTABLE"><label class="custom-control-label" for="inacceptable">Inacceptable</label>
<button type="button" class="btn btn-outline-dark btn-block" (click)="addCondition()"><i class="fa fa-plus fa-lg mr-3"></i>添加新条件</button>
问题是点击ADD A NEW CONDITION按钮,出现新的表单组时,每次选择组数组中的任意单选按钮时,组中第一个数组项对应的单选按钮为被选中.
在遍历数组组时需要考虑的是分配给的 id
和 name
每一个.您当前的输入 id
和 name
在每个循环中都设置为相同的值.
您需要使用 i
变量来使每个输入的 id
和 name
成为动态值,如下所示:
<div *ngIf="conditions" formArrayName="conditions"><div *ngFor="let condition of conditions.controls; let i=index" [formGroupName]="i"><input class="form-control" formControlName="title" type="text" placeholder="title"><div class="custom-control custom-radio custom-control-inline"><input type="radio" id="{{ 'acceptable' + i}}" formControlName="acceptability"class="custom-control-input" [value]="ACCEPTABILITY.ACCEPTABLE"><label class="custom-control-label" for="{{ 'acceptable' + i}}">Acceptable</label><div class="custom-control custom-radio custom-control-inline"><input type="radio" id="{{ 'unacceptable' + i}}" formControlName="acceptability"class="custom-control-input" [value]="ACCEPTABILITY.INACCEPTABLE"><label class="custom-control-label" for="{{ 'unacceptable' + i}}">不可接受</label>