vuex实现的简单购物车功能示例


Posted in Javascript onFebruary 13, 2019

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
我用的一些Node.js开发工具、开发包、框架等总结
Sep 25 Javascript
JavaScript中的数值范围介绍
Dec 29 Javascript
使用jquery+CSS实现控制打印样式
Dec 31 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
Apr 28 Javascript
JavaScript常用标签和方法总结
Sep 01 Javascript
ES6深入理解之“let”能替代”var“吗?
Jun 28 Javascript
vue兄弟组件传递数据的实例
Sep 06 Javascript
vue favicon设置以及动态修改favicon的方法
Dec 21 Javascript
JS中注入eval, Function等系统函数截获动态代码
Apr 03 Javascript
ES6 Map结构的应用实例分析
Jun 26 Javascript
vue中组件通信的八种方式(值得收藏!)
Aug 09 Javascript
JavaScript this关键字的深入详解
Jan 14 Javascript
jquery无缝图片轮播组件封装
Nov 25 #jQuery
Vue中多个元素、组件的过渡及列表过渡的方法示例
Feb 13 #Javascript
vue写h5页面的方法总结
Feb 12 #Javascript
如何将百度地图包装成Vue的组件的方法步骤
Feb 12 #Javascript
微信小程序websocket聊天室的实现示例代码
Feb 12 #Javascript
深入探讨JavaScript的最基本部分之执行上下文
Feb 12 #Javascript
图文详解vue框架安装步骤
Feb 12 #Javascript
You might like
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
python+opencv实现动态物体识别
2018/01/09 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
Python实现简单的文本相似度分析操作详解
2018/06/16 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
python生成特定分布数的实例
2019/12/05 Python
python中p-value的实现方式
2019/12/16 Python
python 类之间的参数传递方式
2019/12/20 Python
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
12岁生日感言
2014/01/21 职场文书
大学生个人学年总结
2015/02/15 职场文书
python中的random模块和相关函数详解
2022/04/22 Python
Python tensorflow卷积神经Inception V3网络结构
2022/05/06 Python