<template>
<div>
<ul>
<li v-for="(item, index) in cities" :key="index" v-if="item.list.length !== 0" class="customlist">
<el-checkbox :indeterminate="item.isIndeterminate" v-model="item.checked" @change="handleCheckAllChange(index, $event)">{{item.name}}</el-checkbox>
<!-- <div style="margin: 15px 0;"></div> -->
<p>
<el-checkbox v-for="(items , i) in item.list" v-model="items.checked" :label="items.name" :key="i" @change="handleCheckedCitiesChange(index, items.sobId, $event)">{{items.name}}</el-checkbox>
</p>
</li>
</ul>
</div>
</template>
<script>
const cityOptions = [{name: 'a1', list: [{name: '上海',sobId: '1'}, {name: '北京',sobId: '2'}, {name: '广州',sobId: '3'}, {name: '深圳',sobId: '4'}]}, {name: 'a2', list: [{name: '上海1',sobId: '5'}, {name: '北京1',sobId: '6'}, {name: '广州1',sobId: '7'}, {name: '深圳1',sobId: '8'}]}];
export default {
data() {
return {
cities: cityOptions,
// isIndeterminate: true
};
},
methods: {
// 全选反选的多选框
handleCheckAllChange(index, e) {
this.cities[index].checked = e
if(e == false) this.cities[index].isIndeterminate = false
var childrenArray = this.cities[index].list
// console.log(childrenArray)
if(childrenArray)
for(var i=0,len=childrenArray.length; i<len; i++)
childrenArray[i].checked = e
},
handleCheckedCitiesChange(index, sobId, e) {
var childrenArray = this.cities[index].list
console.log(childrenArray)
var tickCount = 0, unTickCount = 0, len = childrenArray.length
for(var i = 0; i < len; i++){
if(sobId == childrenArray[i].sobId) childrenArray[i].checked = e
if(childrenArray[i].checked == true) tickCount++
if(childrenArray[i].checked == false) unTickCount++
}
if(tickCount == len) {//二级全勾选
this.cities[index].checked = true
this.cities[index].isIndeterminate = false
} else if(unTickCount == len) {//二级全不勾选
this.cities[index].checked = false
this.cities[index].isIndeterminate = false
} else {
this.cities[index].checked = false
this.cities[index].isIndeterminate = true //添加一级不确定状态
}
},
// 给返回的数据加是否选中的属性
format(items) {
return items.map(item => {
const result = {...item, checked: false, isIndeterminate: false}
if (item.list) {
result.list = this.format(item.list)
}
return result
})
}
},
created() {
},
mounted() {
this.cities = this.format(this.cities)
}
};
</script>
遍历el-checkbox多组全选和单个选
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 网上那些实在是挺乱的,找不到我想要的(也许是我方法不对),后来对比一下,整理后发布一下自己的写法 wxml js ...
- 开发中遇到了一个问题,就是在data中初始定义的temp中devicetype是数组形式,el-checkbox-...
- 最近在写后台的时候,需要一个全选打钩及消除的功能,在此列出,方便各位简友。 下面是JS代码: 下面是html代码: