基于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的mixin策略
Nov 19 Vue.js
vue中利用three.js实现全景图的完整示例
Dec 07 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
梳理一下vue中的生命周期
Dec 30 Vue.js
vue-cli4.0多环境配置变量与模式详解
Dec 30 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
解决vue中provide inject的响应式监听
Apr 19 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
神族 Protoss 剧情介绍
2020/03/14 星际争霸
解析PHP实现下载文件的两种方法
2013/07/05 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
实例讲解php将字符串输出到HTML
2019/01/27 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
JSON相关知识汇总
2015/07/03 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python 实现插入排序算法
2012/06/05 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
财经学院自荐信范文
2014/02/02 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
Nginx源码编译安装过程记录
2021/11/17 Servers