全选按钮

来源:11-10 全选及清空购物车的功能实现(2)

shalama

2021-03-28

您好,全选按钮好像只能全选,多次点击不能实现全选全不选功能

写回答

6回答

希望林柚一健康快乐成长

2022-03-10

//img.mukewang.com/szimg/6229744809c2a80408420175.jpg

//img.mukewang.com/szimg/6229744809865eb306780558.jpg

希望可以帮到你哟

2
2
希望林柚一健康快乐成长
回复
绵羊旅馆lnn
你的allchecked应该是ref属性包裹得值,所以要用到value,我没有用ref声明这个变量,所以不需要使用value
2022-04-06
共2条回复

火源之地小白人

2022-03-12

刚好也想实现这个需求,vuex -> mutations -> 全选按钮commit

selectAll (state, payload) {
    const { shopId } = payload
    const products = state?.carts[shopId]
    if (products) {
        const productsDeepCopy = JSON.parse(JSON.stringify(products))
        const allSelectedRes = Object.values(productsDeepCopy).some((product) => product.check === false)
        // 切换是否全选
        const toggleStatus = (products, selectStatus) => {
            for (const i in products) {
                const product = products[i]
                product.check = selectStatus
            }
        }
        // 没全选,就全选
        if (allSelectedRes) {
            toggleStatus(products, true)
        } else {
            // 已全选,全不选
            toggleStatus(products, false)
        }
    }
}


1
0

Evonne_xy

2022-01-05

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

希望可以帮到你~


0
0

weixin_慕尼黑2291373

2021-08-23

可以把原来的逻辑produck.check = false改为product.check = !produck.check

0
0

Dell

2021-03-29

同学可以自己补一个相关逻辑即可

0
0

无敌的老虎

2021-03-29

都有清空购物车了,还要全不选干什么,全不选自己移除一下数据就好了,什么都等老师现成的?

0
2
qq_Simpleisbeau_0
活该被人怼,最讨厌你这种杠精
2022-02-24
共2条回复

Vue3入门与项目实战 掌握完整知识体系

明星讲师DELL亲授,全方位知识点+高匹配度项目,入门到深度掌握

3382 学习 · 1454 问题

查看课程