CART.VUE 文件
const allCheck = ref(true) //设置一个ref值可以reactive
const IfAllCheck = computed(() => {
const productList = cartList[shopId]
allCheck.value = true //这里将他设置为true, 目的是当你把某个item前的对勾点掉后,由于是computed会重新执行这个方法,每当变化的时候,都会将allcheck值先为true,再去判断是否要将他置为false。好处是为了避免,你最后把下面的所有勾都打上了,他的全选图标会变
for (let i in productList) {
const product = productList[i]
if (product.count > 0 && product.check == false) {
allCheck.value = false
}
}
return allCheck.value
})
const handleAllCheckClick = ()=> {
allCheck.value = !allCheck.value //用户点击后,需要将allCheck的值取反,然后把他作为值传入
console.log(allCheck.value)
store.commit('handleAllCheckClick', { shopId,allCheck })
}
STORE.index 文件
handleAllCheckClick(state,payload) {
const {shopId,allCheck} = payload;
for(let i in state.cartList[shopId]){
if(allCheck.value == true){
state.cartList[shopId][i].check = true;
}else{
state.cartList[shopId][i].check = false
}
}
},
楼上说的那个取反,我前面也是这么想的,发现不行,如果把某个取消,再点击全选会有问题,(你可以试试,看看问题在哪里)。所以我们需要知道check的值,所以我将它设置为了ref变量,写在这两个function的外面,在store里进行判断,如果他是true,将所有的都置为true,如果为false,把所有置为false
希望可以帮到你~