“取消选中所有复选框”不使用角度属性绑定

时间:2017-10-04 15:06:05

标签: javascript angular ngfor property-binding

我在angular中使用了属性绑定来取消选中所有复选框,但它没有按预期工作。 我的期望:当我点击“清除”按钮选择一个或多个复选框后,它应该取消选中所有复选框。 这是我的plunker

isSelected is the boolean variable which i have used to set the 'checked' attribute of checkbox. 

模板:

<div *ngFor="let item of items">
    <input [checked]="isSelected" type="checkbox">{{item}}
</div>
<button (click)="onClear()">Clear All</button>

组件

private items = ['a', 'b', 'c', 'd'];
  private isSelected = false;
  constructor() {
  }

  onClear(){
    this.isSelected = false;
  }

3 个答案:

答案 0 :(得分:1)

在复选框上设置ngModel,并使用ngModelChange跟踪更改。还设置辅助阵列以帮助您跟踪已检查状态。这是一个(简化)示例:

HTML

<input [ngModel]="isSelected[i]" (ngModelChange)="onChange(i)" type="checkbox">{{item}}

<强>打字稿

 isSelected =  [];
 constructor() {
   this.onClear();
 }

 onChange(i){
    this.isSelected[i]=!this.isSelected[i]
  }
  onClear(){
    this.isSelected = [false, false, false, false];
  }

DEMO

答案 1 :(得分:1)

一个解决方案是

<div *ngFor="let item of items">
    <input [(ngModel)]="item.checked" type="checkbox">{{item.label}}
</div>
<button (click)="onClear()">Clear All</button>

使用模板:

private items = [ {'label':'a', 'checked': false },
  {'label':'b', 'checked': false},
  {'label':'c', 'checked': false},
  {'label':'d', 'checked': false}];

onClear(){
    for ( let cb of this.items ) {
      cb.checked = false;
    }
  } 

答案 2 :(得分:1)

首先,你应该知道[checked]不工作,你应该使用[(ngModel)]这个东西,你应该从@ angular / forms导入FormModule。

第二,你应该有多个isSelected变量,因为如果你在选择其中一个时只使用一个isSelected变量,那么所有的复选框都将被选中, 为此你可以在 .ts 文件中使用这样的数组,

items = [{name: 'a', isSelected:false}, 
         {name: 'b', isSelected:false},
         {name: 'c', isSelected:false},
         {name: 'd', isSelected:false}];

并在 HTML

<div *ngFor="let item of items">
    <input [(ngModel)]="item.isSelected" type="checkbox">{{item.name}}
</div>