vue 多层选择按钮的全选

vue的项目中经常会用到的数组遍历,数组遍历的时候我们需要用到vue中的v-for,写法是v-for="自定义一个名字(这个名字可以任意)  in 你要循环的数组(这个名字必须是你的数组的名字)" 

说的再多不如一行代码来的实在

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>vue2.0多层全选按钮的实现</title>
<script src="https://unpkg.com/vue/dist/vue.js"></script> 
<style type="text/css">
body {
font-size: 28px;
color:  red;
}
#app {
font: "微软雅黑";
font-size: 26px;
color: lightgreen;
}
.er{
margin-left: 20px;
}
</style>
</head>
<body>
<p>vue的多层全选按钮的实现</p>
<hr />
<div id="app">
<div id="" v-for="data in datas">
<!--遍历父的-->
<input type="checkbox"  :id="data.listTitle" value="" :checked="isTitleChecked(data)" 
@change="changeTitleChecked(data,$event)"

/>{{data.listTitle}}

<div class="er" v-for="item in data.listItem">
<!--遍历子的-->
<input
type="checkbox"
:value="item"
v-model="data.selected"
/>
{{item.name}}
</div>
</div>
<div id="quanxuan">
<input id="all-checked"
type="checkbox"
:checked="isAllChecked()"
@change="changeAllChecked($event)"
/>
<span>全选</span>
</div>
</div>

<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
datas : [
{
//用于判断是否展示子列表
// isShowListItem : false,
//用于记录选中了哪些子项
id: 666,
selected : [],
//父标题
listTitle : "一级标题",
//子列表
listItem : [
{
id : 1222,
info:0,
name : "高一"
},
{
id : 23,
info:1,
name : "高二"
},
{
id : 13,
info:0,
name : "高三"
}
]
},
{
// isShowListItem : false,
id: 8888,
selected : [],
listTitle : "二级标题",
listItem : [
{
id : 42,
info:1,
name : "大一"
},
{
id : 51,
info:0,
name : "大二"
}
]
}
]
},
methods:{

/**
* 当父标题状态变化时的处理方法
* @param data [当前项的data]
* @param event [当前项的event]
*/
changeTitleChecked : function (data,event) {
if (event.target.checked === true) {
data.listItem.forEach(function (item) {
data.selected.indexOf(item) === -1 && data.selected.push(item);
})
}else {
data.selected = [];
}
},
/**
* 判断父标题选择状态
* @param data [当前项的data]
* @returns {boolean}
*/
isTitleChecked : function (data) {
var _selected = data.selected;
var _listItem = data.listItem;
// 验证selected中是否含有全部的item的id 如果是 证明title要选中
return _listItem.every(function (item) {
return _selected.indexOf(item) != -1;
});
},

/**
* 全选框change事件的回调处理方法
* @param event 
*/
changeAllChecked : function (event) {
if (event.target.checked === true) {
this.datas.forEach(function (data) {
data.listItem.forEach(function (item) {
data.selected.indexOf(item) === -1 && data.selected.push(item);
})
})
}else {
this.datas.forEach(function (data) {
data.selected = [];
})
}
},
 
/**
* 判断全选框选择状态
* @returns {boolean}
*/
isAllChecked : function () {
return this.datas.every(function (data) {
return data.selected.length === data.listItem.length;
});
}

}

})
</script>
</body>
</html>

我只提供代码理论来源于:http://blog.csdn.net/lixueninggg/article/details/65449690

这可能是大神与小白的区别吧!     大神 将理论  小白要的时代吗大笑


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值