html主要部分:
<template v-for="(item, index) in checkboxList">
<input type="checkbox" v-model="selectList" :value="item">
</template>
初始化selectList = [],checkboxList = ['苹果', '橡胶', '梨', '桃子']。
首先说全选事件,这个比较好弄。就是每次触发事件的时候先清空selectList,然后将checkboxList的值赋值给selectList就行了。
反选事件。所谓反选就是先判断如果有选中的则将其状态变为未选中,未选中则将其状态变为选中。
今天偶然发现一个很好用的方法,就是借鉴两个数组,判断是否有相同元素,然后去重这种思路来解决反选问题。
const _this = this
let checkboxList = _this.checkboxList
let selectList = _this.selectList
let tempArr1 = []
let tempArr2 = []
if (!_this.selectList.length) {
_this.selectList = _this.checkboxList
} else {
for (let i = 0, len = selectList.length; i < len; i ++) {
tempArr1[selectList[i]] = true //将数selectList中的元素值作为tempArr1中的键,值为true
}
for(var j=0, lenj = checkboxList.length;j < lenj;j++){
if(!tempArr1[checkboxList[j]]){
tempArr2.push(checkboxList[j]); // 过滤checkboxList与selectList中相同的元素
}
}
_this.selectList = tempArr2
}