angular4 checkbox复选框的全选,反选及个别选择
<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复选框的全选,反选及个别选择的更多相关文章
- js做全选,用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false
用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false,当所有checkbox都被选中时,全选按钮也被选中. 详解: 有两种 ...
- js实现复选框的全选、全不选、反选
js中实现复选框的全选,全不选以及反选,分为两种情况: (1)选中“请选择”前面的复选框实现全选,不选中“请选择”前面的复选框实现全不选 <!DOCTYPE html PUBLIC " ...
- JQ实现复选框的全选反选不选
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【jQuery】复选框的全选、反选,推断哪些复选框被选中
本文与<[JavaScript]复选框的全选.反选.推断哪些复选框被选中>(点击打开链接)为姊妹篇,把里面内容再与jQuery框架中实现一次,相同做到例如以下的效果: 布局还是相同的布局, ...
- js实现复选框的全选、全不选和反选
js实现复选框的全选.全不选和反选 主要是用遍历的方法查找元素,然后通过改变checked的属性来选择,为true则是选中状态,为false则是未选状态 实现代码 <!DOCTYPE html& ...
- Vue复选框的全选
<!DOCTYPE html><html> <head> <meta charset="utf-8"> ...
- 【JavaScript】实现复选框的全选、全部不选、反选
以较为简洁的程序实现复选框的全选.全部不选.反选 操作. 并且将可变的部分设置为JS的参数,以实现代码复用. 全选和全不选 第一个参数为复选框名称,第二个参数为是全选还是全部不选. function ...
- 一天搞定jQuery(三)——使用jQuery完成复选框的全选和全不选
还记得之前我使用JavaScript来实现复选框的全选和全不选效果吗?如果读者初次翻阅本文,可记得看看教你一天玩转JavaScript(七)——使用JavaScript完成复选框的全选和全不选的效果! ...
- jQuery学习(五)——使用JQ完成复选框的全选和全不选
1.在系统后台进行人员管理时,进行批量删除,使用jq完成全选和全不选 步骤分析: 第一步:引入jquery文件 第二步:书写页面加载函数 第三步:为上面的复选框绑定单击事件 第四步:将下面所有的复选框 ...
- jQuery实现复选框的全选、反选、并且根据复选框的<checked属性>控制多个对应div的显示/隐藏
<!doctype html><html> <head> <meta charset="utf-8"> <title>j ...
随机推荐
- Locust分布式负载测试工具入门
忽略元数据末尾 回到原数据开始处 Locust简介 Locust是一个简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试. 以下是github上的仓库地址 https://github.co ...
- Mysql主从同步(1)-主从/主主环境部署梳理
转 :https://www.cnblogs.com/kevingrace/p/6256603.html
- 查看linux服务器硬盘IO读写负载
最近一台linux服务器出现异常,系统反映很慢,相应的应用程序也无法反映,而且还出现死机的情况,经过几天的观察了解,发现服务器压力很大,主要的压力来自硬盘的IO访问已经达到100% 为了方便各位和自己 ...
- 第7章 Iptables与Firewalld防火墙。
第7章 Iptables与Firewalld防火墙. Chapter7_听较强节奏的音乐能够让您更长时间的投入在学习中. <Linux就该这么学> 00:00/00:00 ...
- Java 之进制转换
//十进制转十六进制 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scan ...
- -[__NSArrayI removeAllObjects]: unrecognized selector sent to instance 0x7fa8dc830110
问题 今天做项目,遇到了这个问题 -[__NSArrayI removeAllObjects]: unrecognized selector sent to instance 0x7fa8dc8301 ...
- [原]零基础学习SDL开发之移植SDL2.0到Android
在[原]SDL开发教程我们知道了如何在pc下使用SDL进行开发,在android上面是否一样可以使用呢?答案是肯定的. 下面我们进行移植SDL到Android,这里都是基于SDL最新版进行移植的,在E ...
- SAP ECC6安装系列四:安装过程详解
原作者博客 http://www.cnblogs.com/Michael_z/ ======================================== 续接上篇,我们终于按下了 “Next” ...
- TIM—高级定时器
本章参考资料:< STM32F4xx 参考手册>.< STM32F4xx 规格书>.库帮助文档< stm32f4xx_dsp_stdperiph_lib_um.chm&g ...
- 跟着百度学PHP[12]-文件处理 文件 目录
00x1 文件的属性 文件属性 <?php //-------------------------定义大小转换函数--------------- function changesize_dw($ ...