购物车商品选择处理

2019-05-19  本文已影响0人  弹指一挥间_e5a3

今天我们要实现的效果是商品购物车的选择效果。


image.png

数据分为两级,第一级是店铺shop,第二级是店铺下面的商品good。
主要有三点:
1.不选择商品时,商品会被取消掉


image.png

2.不选择店铺时,店铺的所有商品都被取消掉


image.png
3.不选择全选时,所有商品都被取消掉
image.png

现在用代码来实现:
由于给的接口api没有checked,所以我们在获取数据的时候自己加上checked属性。需注意的是要先添加属性,再把数据赋值。

    getList() {
      axios.get(url.cartLists).then(res=>{
        let lists = res.data.cartList
         lists.forEach(shop=>{
           shop.checked = true
          shop.goodsList.forEach(good=>{
            good.checked = true
          })
        })
        this.lists = lists
      })
    }

这样数据api中就有了checked属性。接下来就好操作了。
1.商品
①动态绑定class<span class="check" :class="{checked:shop.checked}">
②绑定点击事件<div class="select-group js-select-group" @click="selectShop(shop)">

    selectGood(shop,good) {
      good.checked = !good.checked
      shop.checked = shop.goodsList.every(good =>{
        return good.checked
      })

2.店铺
前两步同上

    selectShop(shop) {
      shop.checked = !shop.checked
      shop.goodsList.forEach(good => {
        good.checked = shop.checked
      })
    }

3.全选
前两步同上,不过这里class绑定的是computed:allSelected

    allSelected: {
      get() {
        if(this.lists&&this.lists.length) {
          return this.lists.every(shop => {
            return shop.checked 
          })
        }
        return false
      },
      set(newVal) {
        this.lists.forEach(shop =>{
          shop.checked =newVal
          shop.goodsList.forEach(good =>{
            good.checked = newVal
          })
        })
      }
    }

点击事件:

    selectAll() {
      this.allSelected = !this.allSelected
    }
上一篇下一篇

猜你喜欢

热点阅读