温馨提示:本文翻译自stackoverflow.com,查看原文请点击:typescript - How to check all checkboxes in an Angular reactive form
angular typescript

typescript - 如何以Angular反应形式检查所有复选框

发布于 2020-03-27 15:58:42

我有一个显示复选框列表的Angular表单:

<tbody formArrayName="approvedInvoices"
  *ngFor="let approvedInvoice of approvedInvoices; let i = index">
  <tr>
    <td>
        <input type="checkbox" 
          [formControlName]="i" id="{{i}}">
    </td>
    <td style="padding-top: 18px">
      Invoice Number {{approvedInvoice.invoiceNumber}}
    </td>
</tbody>

我在ngInit()中创建表单:

approvedInvoices: ApprovedInvoice[];

this.controls = this.approvedInvoices.map(c => new FormControl(false));
  this.form = this.formBuilder.group({
    approvedInvoices: new FormArray(this.controls)
  });

这是我的模型:

export class ApprovedInvoice {
    invoiceNumber: string;
} 

这很好,但是我的问题是我不知道如何进行“全选”。我可以得到像这样检查的发票清单:

selectedInvoices() {
  return this.form.value.approvedInvoices
    .map((v, i) => v ? this.approvedInvoices[i] : null)
    .filter(v => v !== null);
}

但我不知道如何检查所有框。

到目前为止,我有这个:

selectAll() {
  for (var _i = 0; _i < this.form.value.approvedInvoices.length; _i++) {
    this.form.value.approvedInvoices[_i] = true;
  }

将所有发票标记为已选中,但是复选框输入不会更改(即未选中)

查看更多

查看更多

提问者
Robbie Mills
被浏览
148
Chellappan வ 2019-02-15 18:47

使用setValue方法在formArray中设置单个表单控件的值

selectAll(){
    this.form.get('approvedInvoices').controls.map(control=>{
      control.setValue(true);
    });
  }