检查FormArray - Angular 2 Reactive Form中的所有复选框

时间:2017-08-18 02:59:00

标签: typescript angular2-forms

我有一个角度2反应形式,其中包含一组数据绑定的复选框。这工作正常,但现在我需要添加一个按钮来检查所有复选框。

以下是我的FormGroup配置方式:

  private buildForm() {
    this.groupForm = this._formBuilder.group({
      bookId: this._formBuilder.control(null),
      startDate: this._formBuilder.control(null),
      groupTotal: this._formBuilder.control(null),
      chapterGrouping: this._formBuilder.control("all"),
      groupChapters: this.buildChapters()
    });
  } 

  private buildChapters() {
    const chapters = this.chapters.map(chapter => {
      return this._formBuilder.control(chapter.selected)
    });
    return this._formBuilder.array(chapters);
  }

继承我的HTML:

<div class="form-group">
    <label for="">Select chapters</label>
    <div *ngFor="let chapter of formChapters.controls; let i=index" class="checkbox">
        <label>
        <input type="checkbox"  [formControl]="chapter" >
        {{chapters[i].title}}
        </label>
    </div>
</div>

如何访问FormArray以将所有复选框设置为已选中?

1 个答案:

答案 0 :(得分:5)

  1. 将formGroupName和formControlName添加到模板中。 (让Angular 2+知道DOM和formGroup结构的关系。)
  2. 从模板中删除[formControl] =“chapter”。 (你不需要这个。)
  3. 在模板中添加一个按钮。
  4. 使用value属性(获取有效数组)和setValue方法(将被操纵的数组反馈)。
  5. 您的模板将如下所示:

    <div class="form-group" formGroupName="groupChapters">
        <label for="">Select chapters</label>
        <div *ngFor="let chapter of formChapters.controls; let i = index" class="checkbox">
            <label>
                <input type="checkbox" formControlName="{{i}}">
                {{chapters[i].title}}
            </label>
        </div>
        <button (click)="checkAll()">Check all</button>
    </div>
    

    您添加到班级的方法:

    private checkAll() {
        this.groupForm.controls['groupChapters'].setValue(
            this.groupForm.controls['groupChapters'].value
                .map(value => true);
        );
    }
    

    正在工作的Plunk:http://embed.plnkr.co/8yXBn1DhboiIwRIv7AS0/