法一:用selectData接收通过filter()收集到的 check == true 的每一项,再通过比较selectData和lists的长度来判断是否全选。
checkAllChange(){ //全选状态的改变
for(var i=0; i<this.lists.length; i++){
this.lists[i].check = this.checkAll;
}
},
curChange(){ //当前状态的改变
//filter()筛选满足条件的数据,返回的是数组
var selectData = this.lists.filter((item, index) => {
return item.check == true;
});
selectData.length == this.lists.length ? this.checkAll = true : this.checkAll = false;
}
法二:代码更简洁,通过every()方法对数组每一项进行检测,返回布尔值
every()方法的定义与用法:
- every()方法用于检测数组中的所有元素是否都满足指定条件(该条件为一个函数)。
- every()方法会遍历数组的每一项,如果有有一项不满足条件,则表达式返回false,剩余的项将不会再执行检测;如果遍历完数组后,每一项都符合条件,则返回true.
checkAllChange(){ //全选状态的改变
for(var i=0; i<this.lists.length; i++){
this.lists[i].check = this.checkAll;
}
},
curChange(){ //当前状态的改变
this.checkAll = this.lists.every(item => item.check)
}