使用vue实现购物车详细操作

334 阅读2分钟

相信很多小伙伴在操作购物车时没有思路,不知如何操作


下边我来给大家讲解购物车的具体操作

废话不多说上代码

view视图 弟弟我为了方便大家学习 就不拆分组件了

<template>  <div>      <Header/>      <!-- 购物车页面 -->      <div class="cart-wrapper">      <div class="cart">        <!-- for循环所有的购物车数据 用于展示 -->        <div class="cartItem" v-for="(item,index) in data" :key="index">          <div class="cartItem-check">            <!-- 单选框 -->            <!-- 在我们加入购物车时可以自行加入数据里边一个数量num、、、一个check属性赋值为false -->            <!-- 让我们的单选框v-model绑定此条数据的check属性 -->            <input type="checkbox" v-on:change="checkk"  v-model="item.check" />          </div>          <div class="cartItem-img">            <img :src="item.img" alt />          </div>          <div class="cartItem-mess">            <h4>{{item.name}}</h4>            <p>              <span class="price">{{item.price | addCurrencyTag1}}</span>              <span class="num">                <!-- 操作数量减 -->                <button v-on:click="sub(item)">-</button>                <span>{{item.num}}</span>                <!-- 操作数量加 -->                <button v-on:click="add(item)">+</button>              </span>            </p>          </div>        </div>      </div>    </div>    <div class="footer">      <div class="qx">        <!-- 全选框 -->        <input type="checkbox" v-model="showChecked" v-on:change="qx"/>全选      </div>      <div class="totalNum">{{totalNum}}</div>      <div class="totalMoney">{{`¥${totalMoney}`}}</div>    </div>   </div></template><script>import Header from '../components/Header'export default {  name: '',  data() {    return {            };  },  components:{      Header  },  computed:{    // 计算属性获取vueX中的购物车数据      data(){          return this.$store.state.cartList      },      showChecked(){      return this.$store.state.cart.isChecked    },    // 计算总量    totalNum(){      let aa=0      let list=this.$store.state.cartList      list.map((m)=>{        // if判断购物车商品的check属性,如果为true则参与计算        if(m.check){          aa+=m.num        }      })      return aa    },    // 计算总价    totalMoney(){      let aa=0      let list=this.$store.state.cartList      list.map((m)=>{        // if判断购物车商品的check属性,如果为true则参与计算        if(m.check){          aa+=m.num*m.price        }      })      return aa    }  },  watch:{  },  methods: {    // 以下操作都在vuex中操作 下图为vueX数据操作       add(m){          this.$store.dispatch("cart/add",m)      },      sub(m){         this.$store.dispatch("cart/sub",m)       },      checkk(){          this.$store.dispatch("cart/isChecked")      },       qx(){      let aa=window.event.target.checked      this.$store.dispatch("cart/qx",aa)    }  },  filters: {    // 文本过滤    addCurrencyTag1(value) {      var tempPrice = parseFloat(value).toFixed(2);      return `¥${tempPrice}`;    },  },};</script>

vueX购物车模块

const cart ={    namespaced:true,    state:()=>{        return{            // 购物车数据,            cartList:JSON.parse(window.localStorage.getItem("cart"))||[],            // 全选按钮绑定            isChecked:false        }    },    mutations:{        // 数量加操作        add(state,item){            // 通过findIndex找到对应商品的下标            let index=state.cartList.findIndex((el)=>{                return item.id==el.id            })            // 操作商品的数量++            state.cartList[index].num++            // 防止数据丢失我们存在localStorage中            window.localStorage.setItem("cart",JSON.stringify(state.cartList))        },        // 数量减操作 同上        sub(state,item){            let index=state.cartList.findIndex((el)=>{                return item.id==el.id            })            state.cartList[index].num--            // 如果购物车数量小于1则删除此商品            if(state.cartList[index].num<1){                state.cartList.splice(index,1)            }            window.localStorage.setItem("cart",JSON.stringify(state.cartList))        },        qx(state,i){            state.cartList.map((m)=>{                m.check=i                console.log(m)            })        },        // 判断所有商品的单选框是否选中 如果选中则全选按钮也选中        isChecked(state){           let is= state.cartList.every((el)=>{                return el.check==true            })            state.isChecked=is        }    },    actions:{        addCart(cont,item){            cont.commit("addCart",item)        },        add(cont,item){            cont.commit("add",item)        },        sub(cont,item){            cont.commit("sub",item)        },        qx(cont,check){            cont.commit("qx",check)        },        isChecked(cont){            cont.commit('isChecked')        }    }}export default cart

通过上边的代码相信大家对于购物车有了基本操作的思路和想法

欢迎联系我交流讨论