基于vuex实现购物车功能


Posted in Vue.js onJanuary 10, 2021

本文实例为大家分享了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: {}
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
Vue router安装及使用方法解析
Dec 02 Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
一篇文章学会Vue中间件管道
Jun 20 Vue.js
vue实现锚点定位功能
Jun 29 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
vue实现书本翻页动画效果实例详解
Apr 08 Vue.js
vue打包时去掉所有的console.log
Apr 10 Vue.js
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 Vue.js
vue如何清除浏览器历史栈
May 25 Vue.js
ant design vue的form表单取值方法
Jun 01 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 #Vue.js
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 #Vue.js
vue编写简单的购物车功能
Jan 08 #Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 #Vue.js
vuex的使用和简易实现
Jan 07 #Vue.js
vue watch监控对象的简单方法示例
Jan 07 #Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 #Vue.js
You might like
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
javascript this详细介绍
2016/09/19 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
python如何实现一个刷网页小程序
2018/11/27 Python
Python实现删除排序数组中重复项的两种方法示例
2019/01/31 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
德国网上宠物店:Zoobio
2018/05/23 全球购物
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
internal修饰符起什么作用
2013/12/16 面试题
《藏戏》教学反思
2014/02/11 职场文书
运动会通讯稿150字
2014/02/15 职场文书
部队万能检讨书
2014/02/20 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
三下乡活动心得体会
2016/01/23 职场文书
浅谈Python中对象是如何被调用的
2022/04/06 Python
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android