<label><input type="checkbox" name="" [(ngModel)]="master">全选</label>
<table>
<tr *ngFor="let dep of departs">
<td><label><input type="checkbox" name="" [(ngModel)]="dep.status" [(checked)]="master">{{dep.name}}</label></td>
</tr>
</table>

只需要在ts里声明departs

private departss = [
{'name':'张三','s':false},
{'name':'李四','s':false},
{'name':'王五','s':false}
]

就可以完成全选和取消全选效果

上面这种完成的效果如下,全选反选和个别选择可以实现,但有个问题:当取消个别选择的时候全选按钮没有取消勾选

解决办法,在点击全选之后禁用下面的按钮,只有取消全选之后,才能选择下面的

<div *ngFor="let dep of departs;let i=index">
<label *ngIf="dep.name=='全选'">
<input type="checkbox" name="checkEp" (click)="checked(i)" [(ngModel)]="checked[i]">
{{dep.name}}
</label>
<label *ngIf="dep.name!=='全选'">
<input type="checkbox" name="checkEp" [(ngModel)]="checked[i]" [disabled]="checked[0]" [(checked)]="checked[0]">
{{dep.name}}
</label>
</div>

ts

private departs = [
{name:'全选'},
{name:'张三'},
{name:'李四'},
{name:'王五'}
] //全选
checked(m){
this.checkAll(m,m.checked[0]);
  } checkAll(dir,boolean){
dir.checked=[];
dir.forEach(i=>{
dir.checked.push(boolean);
})
}

效果如下

这样一来就比较符合逻辑了.....but,直接给禁用掉有写太过霸道,如果数据一多的话,想要选择除某个人或某几个人之外的其他人就很麻烦

这种也确实不符合用户习惯,还是不禁用才好,于是。。。更新下写法

html

<div *ngFor="let dep of departs;let i = index">
<label><input type="checkbox" [(ngModel)]="dep.checked" (change)="checkEvent(dep,i)">{{dep.name}}</label>
</div>

ts

departs = [
{'name':'全选',checked:false},
{'name':'张三',checked:false},
{'name':'李四',checked:false},
{'name':'王五',checked:false}
] checkEvent(item,i){ if(i===0){ // 如果点击的是第一个全选按钮,就实现全选取消全选
if(item.checked){
this.departs.forEach(m=>{m.checked = true})
}else{
this.departs.forEach(m=>{m.checked = false})
}
}else{
let res = this.departs.some(m=>{return !m.checked});
if(res){ // 如果全选以后,其中一个或多个取消选择,就把第一个全选按钮取消勾选
this.departs[0].checked = false;
}
let flag = true;
for(var n=1;n<this.departs.length;n++){
if(!this.departs[n].checked){
flag = false;
}
}
if(flag){ // 如果全选以后,其他的全部选中了,就把全选按钮也选中
this.departs[0].checked = true;
}
}
}

最终,终于实现想要的效果

这个效果顺眼多了,也更符合用户习惯,当然,如果有更好更有效率的实现方法,也欢迎提出~

angular4 checkbox复选框的全选,反选及个别选择的更多相关文章

  1. js做全选,用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false

    用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false,当所有checkbox都被选中时,全选按钮也被选中. 详解: 有两种 ...

  2. js实现复选框的全选、全不选、反选

    js中实现复选框的全选,全不选以及反选,分为两种情况: (1)选中“请选择”前面的复选框实现全选,不选中“请选择”前面的复选框实现全不选 <!DOCTYPE html PUBLIC " ...

  3. JQ实现复选框的全选反选不选

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 【jQuery】复选框的全选、反选,推断哪些复选框被选中

    本文与<[JavaScript]复选框的全选.反选.推断哪些复选框被选中>(点击打开链接)为姊妹篇,把里面内容再与jQuery框架中实现一次,相同做到例如以下的效果: 布局还是相同的布局, ...

  5. js实现复选框的全选、全不选和反选

    js实现复选框的全选.全不选和反选 主要是用遍历的方法查找元素,然后通过改变checked的属性来选择,为true则是选中状态,为false则是未选状态 实现代码 <!DOCTYPE html& ...

  6. Vue复选框的全选

    <!DOCTYPE html><html>    <head>        <meta charset="utf-8">      ...

  7. 【JavaScript】实现复选框的全选、全部不选、反选

    以较为简洁的程序实现复选框的全选.全部不选.反选 操作. 并且将可变的部分设置为JS的参数,以实现代码复用. 全选和全不选 第一个参数为复选框名称,第二个参数为是全选还是全部不选. function ...

  8. 一天搞定jQuery(三)——使用jQuery完成复选框的全选和全不选

    还记得之前我使用JavaScript来实现复选框的全选和全不选效果吗?如果读者初次翻阅本文,可记得看看教你一天玩转JavaScript(七)——使用JavaScript完成复选框的全选和全不选的效果! ...

  9. jQuery学习(五)——使用JQ完成复选框的全选和全不选

    1.在系统后台进行人员管理时,进行批量删除,使用jq完成全选和全不选 步骤分析: 第一步:引入jquery文件 第二步:书写页面加载函数 第三步:为上面的复选框绑定单击事件 第四步:将下面所有的复选框 ...

  10. jQuery实现复选框的全选、反选、并且根据复选框的<checked属性>控制多个对应div的显示/隐藏

    <!doctype html><html> <head> <meta charset="utf-8"> <title>j ...

随机推荐

  1. 使用阿里云Docker镜像加速

    使用docker官方的docker hub速度太慢,正好看到国内阿里云也做了docker镜像,于是想试试看阿里云的docker源.先附上 阿里云docker hub地址 .新用户需要注册成为开发者.打 ...

  2. [k8s]metricbeat的kubernetes模块&kube-metric模块

    正确姿势启动metricbeat metricbeat.modules: - module: system metricsets: - cpu - filesystem - memory - netw ...

  3. JAVA类加载器概念与线程类加载器

    类加载器的功能:通过一个类的全限定名来获取描述此类的二进制字节流的过程 java的类加载器大致可以分为两类,一类是系统提供的,一类是由应用开发人员编写的.系统提供的类加载器有以下三种: 引导类加载器( ...

  4. 【C语言】18-变量类型

    一.变量的作用域 C语言根据变量作用域的不同,将变量分为局部变量和全局变量. 1.局部变量 1> 定义:在函数内部定义的变量,称为局部变量.形式参数也属于局部变量. 2> 作用域:局部变量 ...

  5. Python3制作中文词云图

    1. 准备好文本数据 2. pip install jieba 3. pip install wordcloud 4. 下载字体例如Songti.ttc(mac系统下的称呼,并将字体放在项目文件夹下) ...

  6. gdb,程序调试助手

    启动GDB:(其中我的app是编译之后的可执行文件) 退出命令:quit或者简写q 帮助获取: gdb通过完备的在线帮助,使我们使用起来更加方便.所有的帮助信息都是通过help命令获得的,运行help ...

  7. 跟着百度学PHP[8]-setcookie的其他参数学习

    setcookie(name,value,time,path,domain,secure) 第四个参数是cookie的有效路径.顾名思义就是在那个路径下是有效的.当然了其子目录下也是有效的.比如 /h ...

  8. rp2836 网卡以及串口与接插件位置关系

    P3     ETH1 P6     ETH0 P7     /dev/ttyS3 调试口 P13-1  /dev/ttyS2  rs485+ P13-2  /dev/ttyS2  rs485- P1 ...

  9. Android——excise(用线性布局、表格布局、相对布局做发送邮件界面)

    LinearLayout <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...

  10. DIV中display和visibility属性差别

    DIV中display和visibility属性差别 DIV中display和visibility属性差别还是挺大的,虽然Visibility和Display属性都可以达到隐藏页面元素的目的,但它们的 ...