【问题标题】:How to get checkbox data in angular material如何在角度材料中获取复选框数据
【发布时间】:2018-10-28 16:27:45
【问题描述】:

我想在用户选择时获取所有复选框项目,现在正在获取数据但问题是复选框不会更改,我的意思是当我单击复选框时,如果初始状态被选中,则始终保持不变检查,反之亦然。

this.settings_data = ["one", "two", "three", "four", "five"];

<div class="settings_head" fxFlex="50" *ngFor="let item of settings_data">
  <mat-checkbox formControlName="settingsCheckboxvalues" (ngModelChange)="seleteditems($event,item)">{{item}}</mat-checkbox>
</div>



seleteditems(event, value) {
  this.allitems.push(value);
}

【问题讨论】:

    标签: angular material-design angular-material


    【解决方案1】:

    使用响应式表单会更容易:

    this.form = this.fb.group({
          'one': false,
          'two': false,
          'three': false,
          'four': false
        })
        this.controlNames = Object.keys(this.form.controls).map(_=>_)
        this.selectedNames$ = this.form.valueChanges.pipe(map(v => Object.keys(v).filter(k => v[k])));
    

    模板:

    <ng-container [formGroup]="form">
      <mat-checkbox *ngFor="let controlName of controlNames" [formControlName]="controlName">{{controlName}}</mat-checkbox>
    </ng-container>
    

    Here is an edit of your stackblitz.

    【讨论】:

      【解决方案2】:

      我认为你把事情复杂化了。

      修改您的数组,使每个条目都有一个name 和一个checked 属性,并使用[(ngModel)] 将复选框绑定到它们


      ts

      array = [
          {
            name: 'one',
            checked: false
          },
          {
            name: 'two',
            checked: false
          },
          {
            name: 'three',
            checked: false
          },
          {
            name: 'four',
            checked: false
          },
          {
            name: 'five',
            checked: false
          }
        ]
        getCheckboxes() {
          console.log(this.array.filter(x => x.checked === true).map(x => x.name));
        }
      

      html

      <div *ngFor="let item of array">
          <mat-checkbox [(ngModel)]="item.checked" (change)="getCheckboxes()">{{item.name}}</mat-checkbox>
      </div>
      

      Demo

      【讨论】:

      • 感谢您的回答,是否可以使用 formControlName 而不是 ngModel ?
      猜你喜欢
      • 2019-04-16
      • 2021-10-30
      • 2019-06-02
      • 2021-11-02
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      相关资源
      最近更新 更多