vuex怎么制作购物车自定义添加和清除商品
Admin 2022-06-13 群英技术资讯 1284 次浏览
很多朋友都对“vuex怎么制作购物车自定义添加和清除商品”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧!本文实例为大家分享了vuex实现购物车功能的具体代码,供大家参考,具体内容如下
先看效果:

代码:
<template>
<div class="Home">
<h1>vuex购物车案例</h1>
<add-from></add-from>
<shop-cart></shop-cart>
</div>
</template>
<script>
import AddFrom from './Add.vue'
import ShopCart from './ShopCart.vue'
// @ is an alias to /src
// import HelloWorld from '@/components/HelloWorld.vue'
export default {
name: 'Home',
components: {
AddFrom,
ShopCart
},
};
</script>
<style>
table {
width: 800px;
margin: 0 auto;
border: 1px solid #ccc;
border-spacing: 0;
}
tbody th,
tbody td {
border: 1px solid #ccc;
text-align: center;
}
h1{
text-align: center;
}
.add{
width: 800px;
margin: 0 auto;
}
</style>
父组件
<template>
<div class="add">
<div class="from-group">
<label for="">商品编号</label>
<input type="text" v-model="shop.id" placeholder="请输入商品编号">
</div>
<div class="from-group">
<label for="">商品名称</label>
<input type="text" v-model="shop.name" placeholder="请输入商品名称">
</div>
<div class="from-group">
<label for="">商品价格</label>
<input type="text" v-model="shop.price" placeholder="请输入商品价格">
</div>
<div class="from-group">
<label for="">商品数量</label>
<input type="text" v-model="shop.count" placeholder="请输入商品数量">
</div>
<div class="from-group">
<button @click="add">添加商品</button>
</div>
</div>
</template>
<script>
export default {
name: 'add',
data() {
return {
shop:{}
};
},
methods:{
add(){
this.$store.dispatch("addShopList",this.shop)
this.shop = {
id:"",
name:"",
price:"",
count:""
}
}
}
};
</script>
<style scoped>
.add{
width: 800px;
text-align: center;
}
</style>
```bash
<template>
<div class="Shop-Cart">
<table>
<thead border>
<tr>
<th>商品编号</th>
<th>商品名称</th>
<th>商品价格</th>
<th>商品数量</th>
<th>小计</th>
<th>操作</th>
</tr>
</thead>
<tbody v-if="shop.length > 0">
<tr v-for="(i, e) in shop" :key="e">
<td>{{ i.id }}</td>
<td>{{ i.name }}</td>
<td>{{ i.price }}</td>
<td>
<button @click="add(e)">+</button>
<input type="text" v-model="i.count" />
<button @click="delet(e)">-</button>
</td>
<td>¥{{ i.price * i.count }}</td>
<td><button @click="del(e)">删除</button></td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="6" align="right">总计:{{ total }}</td>
<button @click="clear">清除购物车</button>
</tr>
</tfoot>
</table>
</div>
</template>
<script>
export default {
name: 'Shop-Cart',
components: {},
data() {
return {};
},
computed: {
shop() {
return this.$store.getters.getlist;
},
total() {
return this.$store.getters.getShopTotal;
}
},
methods: {
del(e) {
// this.$store.dispatch()
this.$store.dispatch('remoteList', e);
},
add(e) {
this.$store.dispatch('addList', e);
},
delet(e) {
this.$store.dispatch('deleteList', e);
},
clear() {
this.$store.dispatch('clearList', []);
}
}
};
</script>
vuex组件
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
list: [{
id: 1,
name: "哇哈哈",
price: 3,
count: 0
},
{
id: 2,
name: "哇哈",
price: 3,
count: 0
}
]
},
getters: {
//获取购物车数据
getlist(state) {
return state.list
},
//商品的总价
getShopTotal(state,index) {
let result = 0;
state.list.forEach((item, index) => {
result += item.price * item.count
})
return result
},
},
mutations: {
//删除购物车单个数据
remoteList(state,index) {
state.list.splice(index, 1);
console.log("aaa",state)
},
//商品数量增加
addList(state, index) {
state.list[index].count++;
},
//商品数量减少
deleteList(state, index) {
state.list[index].count--;
if(state.list[index].count<=0){
state.list[index].count = 0
return ;
}
},
//清除购物车
clearList(state, arr) {
state.list = arr
},
addShopList(state,shop){
state.list.push(shop)
}
},
//使用actions调用mutations方法
actions: {
remoteList({
commit
}, index) {
commit("remoteList", index)
},
addList({
commit
}, index) {
commit("addList", index)
},
deleteList({
commit
}, index) {
commit("deleteList", index)
},
clearList({
commit
}, arr) {
commit("clearList", arr)
},
addShopList({commit},shop){
commit("addShopList",shop)
}
},
modules: {}
})
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家详细介绍了vue实现简单的轮播图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
栅格就是网格,本文详细的介绍了Bootstrap网页布局网格的原理和实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
我们在做后台管理系统时,经常有根据不同权限添加不同路由的需求。对于一些新手老说,比较容易容易遇到的问题就是,动态添加的路由页面在刷新出现时失效的情况。那么这时网页刷新出现404是什么原因呢?我们要如何解决?
nodejs中想要访问根目录同级目录里的文件,开始用__dirname,发现_dirname只是追加自身的目录路径,能调取到同级目录下的文件,却不能调取其他目录下的文件,尝试把文件路径换成相对路径可以访问成功,考虑到项目中不会去层层翻目录,翻了资料nodejs的fs模块大多是结合了nodejs的path模块使用,path.resolve和path.join两个方法能传入文件路径,并且文件不存在时会
数组是一种特殊对象。js中并没有真正的数组,只是用对象模拟数组。数组是值的有序集合,每一个值叫做一个元素,而每一个元素在数组中有一个位置,以数字表示,称为所以。而JS中没有真正的数组,只是用对象模拟数组。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008