【发布时间】:2017-12-21 21:21:46
【问题描述】:
我有一个包含动态数量的复选框的列表,每个都有 id 属性。
<li *ngFor='let i of someArray'>
<input type="checkbox" id={{i}}>
</li>
如果 [(ngModel)] 以前知道每个输入复选框,我可以将它们分配给这些变量。
但是如何在保留双向绑定概念的同时附加动态数量的复选框。
我正在使用@angular/core 2.4.10。
【问题讨论】:
我有一个包含动态数量的复选框的列表,每个都有 id 属性。
<li *ngFor='let i of someArray'>
<input type="checkbox" id={{i}}>
</li>
如果 [(ngModel)] 以前知道每个输入复选框,我可以将它们分配给这些变量。
但是如何在保留双向绑定概念的同时附加动态数量的复选框。
我正在使用@angular/core 2.4.10。
【问题讨论】:
您必须为此使用FormArray。
import {FormGroup} from '@angular/forms';
constructor(private fb: FormBuilder) {}
public form: FormGroup = this.fb.group({
checkboxes: this.fb.array([])
});
然后你可以从控件循环:
<li *ngFor='let control of form.checkboxes.controls; let i = index'>
<input type="checkbox" id={{i}} [formControl]="control">
</li>
然后你可以通过this.form.get('checkboxes').value获取值。
【讨论】:
control.setValue(false),其中control 是一个保存控件的变量。
与@Chrillewoodz 所说的不同,您不必强制使用表单数组,尽管我建议您使用它。否则你可以这样做
<li *ngFor='let box of someArray; let i = index'>
<input type="checkbox" [id]="box" [(ngModel)]="someArray[i]">
</li>
【讨论】:
FormArray 可以在您不知道将存在多少控件或表单中有动态元素时使用。
FormArray 在这个stackoverflow answer中有很好的解释
【讨论】: