vuex实现的简单购物车功能示例
程序员文章站
2022-05-25 18:48:26
本文实例讲述了vuex实现的简单购物车功能。分享给大家供大家参考,具体如下:
购物车组件
...
本文实例讲述了vuex实现的简单购物车功能。分享给大家供大家参考,具体如下:
购物车组件
<template> <div> <h1>vuex-shopcart</h1> <div class="shop-listbox"> <shop-list/> </div> <h2>已选商品</h2> <div class="shop-cartbox"> <shop-cart/> </div> </div> </template> <script> import shoplist from "./shop-list"; import shopcart from './shop-cart'; export default{ name:'shop', components:{ 'shop-list':shoplist, 'shop-cart':shopcart } } </script>
商品列表
<template> <div class="shop-list"> <table> <tr class="shop-listtitle"> <td>id</td> <td>名称</td> <td>价格</td> <td>操作</td> </tr> <tr v-for="item in shoplist" class="shop-listinfo"> <td>{{item.id}}</td> <td>{{item.name}}</td> <td>{{item.price}}</td> <td><button @click="addtocart(item)">加入购物车</button></td> </tr> </table> </div> </template> <script> import{mapactions} from "vuex"; export default{ name:'shoplist', data(){ return{ } }, computed:{ shoplist(){ return this.$store.getters.getshoplist } }, methods:{ ...mapactions(['addtocart']) } } </script> <style lang="less" scoped> @import url('../../static/public.less'); </style>
选中商品列表
<template> <div class="shop-list"> <table> <tr class="shop-listtitle"> <td>id</td> <td>名称</td> <td>价格</td> <td>数量</td> <td>操作</td> </tr> <tr v-for="item in cartdata" class="shop-listinfo"> <td>{{item.id}}</td> <td>{{item.name}}</td> <td>{{item.price}}</td> <td>{{item.num}}</td> <td><button class="shop-dele dele-btn" @click="deletshop(item)">删除</button></td> </tr> <tr v-if="cartdata.length<=0"> <td colspan="5">暂无数据</td> </tr> <tr> <td colspan="2">总数:{{totalnum}}</td> <td colspan="2">总价格:{{totalprice}}</td> <td><button class="dele-cart dele-btn" @click="clearcart">清空购物车</button></td> </tr> </table> </div> </template> <script> import {mapgetters,mapactions} from "vuex"; export default{ name:'shopcart', data(){ return{ } }, computed:{ ...mapgetters({ cartdata:'addshoplist', totalnum:'totalnum', totalprice:'totalprice' }) }, methods:{ ...mapactions({ clearcart:'cleartocart', deletshop:'delettoshop' }) } } </script> <style lang="less" scoped> @import url('../../static/public.less'); .dele-btn{ background-color: red !important; } .dele-btn:hover{ background-color: #bd0000 !important; } </style>
vuex 创建
npm install vuex --save
,创建vuex文件夹,在文件夹中创建store.js,引入vuex;
import vue from "vue"; import vuex from 'vuex'; import cart from "./modules/cart"; vue.use(vuex); export default new vuex.store({ modules:{ cart } })
建立一个模块文件夹modules,里面创建创建当个store模块,然后默认输出,在store.js中引入;
const state = { shop_list: [{ id: 11, name: '鱼香肉丝', price: 12, }, { id: 22, name: '宫保鸡丁', price: 14 }, { id: 34, name: '土豆丝', price: 10 }, { id: 47, name: '米饭', price: 2 },{ id: 49, name: '蚂蚁上树', price: 13 }, { id: 50, name: '腊肉炒蒜薹', price: 15 }], add:[] } const getters ={ //获取商品列表 getshoplist:state => state.shop_list, //获取购物车列表 addshoplist:state => { return state.add.map(({id,num})=>{ let product = state.shop_list.find(n => n.id == id); if(product){ return{ ...product, num } } }) }, //获取总数量 totalnum:(state,getters) =>{ let total =0; getters.addshoplist.map(n=>{ total += n.num; }) return total; }, //计算总价格 totalprice:(state,getters)=>{ let total=0; getters.addshoplist.map(n=>{ total += n.num*n.price }) return total; }, } const actions={ //加入购物车 addtocart({commit},product){ commit('addcart',{ id:product.id }) }, //清空购物车 cleartocart({commit}){ commit('clearcart') }, //删除单个物品 delettoshop({commit},product){ commit('deletshop',product) } } const mutations ={ //加入购物车 addcart(state,{id}){ let record = state.add.find(n => n.id == id); if(!record){ state.add.push({ id, num:1 }) }else{ record.num++; } }, //删除单个物品 deletshop(state,product){ state.add.foreach((item,i)=>{ if(item.id == product.id){ state.add.splice(i,1) } }) }, //清空购物车 clearcart(state){ state.add=[]; } } export default{ state, getters, actions, mutations }
希望本文所述对大家vue.js程序设计有所帮助。
推荐阅读
-
微信小程序实现的日期午别医生排班表功能示例
-
JS实现的Object数组去重功能示例【数组成员为Object对象】
-
Android开发使用json实现服务器与客户端数据的交互功能示例
-
Android编程实现变化的双重选择框功能示例
-
Android编程实现的短信编辑器功能示例
-
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
-
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
-
python,Django实现的淘宝客登录功能示例
-
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
-
C#实现的上传图片、保存图片、加水印、生成缩略图功能示例