vuex实现的简单购物车功能示例
作者:东边的小山 时间:2024-05-08 10:43:19
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/yelin042/article/details/80216821
标签:vuex,购物车
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
模仿PHP写的ASP分页函数
2008-04-13 06:11:00
Python实现二维数组输出为图片
2022-10-07 21:49:55
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2023-07-21 16:21:41
![](https://img.aspxhome.com/file/2023/0/5707955470_0s.png)
linux 后台日志 mysql 错误异常的解释(推荐)
2024-01-26 06:01:42
以实例全面讲解PHP中多进程编程的相关函数的使用
2023-10-18 12:21:55
python 使用值来排序一个字典的方法
2022-02-05 00:25:05
np.hstack()和np.dstack()的使用
2021-02-03 12:52:15
Python中torch.norm()用法解析
2021-12-01 09:42:43
![](https://img.aspxhome.com/file/2023/9/66749_0s.png)
Javascript学习第一季 二
2008-06-24 18:20:00
详解Go语言中make和new的区别
2024-04-27 15:37:11
kali最新国内更新源sources
2022-03-25 02:53:37
![](https://img.aspxhome.com/file/2023/7/99367_0s.png)
python用Pygal如何生成漂亮的SVG图像详解
2022-12-12 21:45:22
![](https://img.aspxhome.com/file/2023/3/131593_0s.gif)
深入了解Go语言中web框架的中间件运行机制
2024-04-26 17:24:33
![](https://img.aspxhome.com/file/2023/4/134164_0s.png)
用Python实现一个模仿UP主弹幕控制的直播间功能
2023-02-24 18:13:27
![](https://img.aspxhome.com/file/2023/9/65859_0s.jpg)
python global关键字的用法详解
2023-12-30 03:32:02
SQL Server 置疑、可疑、正在恢复等情况分析
2012-01-05 18:51:59
golang grpc配置使用实战
2024-02-06 01:17:09
![](https://img.aspxhome.com/file/2023/5/109735_0s.png)
分享PHP header函数使用教程
2023-09-04 12:07:14
js禁止Backspace键使浏览器后退的实现方法
2024-04-17 09:54:05
php 不能连接数据库 php error Can't connect to local MySQL server
2023-11-07 10:43:50