vuex实现简单的购物车功能

作者:UIEngineer 时间:2024-05-08 10:42:20 

本文实例为大家分享了vuex实现购物车功能的具体代码,供大家参考,具体内容如下

文件目录如下:

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 shoList from './shop-list'
import shopCart from './shop-cart'

export default {
 name: 'shop',
 components: {
     'shop-list' : shoList,
     'shop-cart' : shopCart
 }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

商品列表

<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" :key="item.id">
               <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 {mapGetters,mapActions} from "vuex";
export default {
   name : 'shopList',
   computed: {
       ...mapGetters({
               shopList:'getShopList',
           })
   },
   methods: {
       ...mapActions(['addToCart'])
   },
}
</script>

选中商品列表

<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" :key="item.id">
               <td>{{item.id}}</td>
               <td>{{item.name}}</td>
               <td>{{item.price}}</td>
               <td>{{item.num}}</td>
               <td><button class="shop-dele dele-btn" @click="deleteShop(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',
           deleteShop:"deletToShop"
       })
   }
}
</script>

vuex 创建

npm install vuex --save,创建vuex文件夹,在文件夹中创建store.js,引入vuex;

store.js

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中引入;

cart.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 => {
       // map()方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
       return state.add.map(({ id, num }) => {
           let product = state.shop_list.find(n => n.id == id)// find()方法返回通过测试(函数内判断)的数组的第一个元素的值,如果没有符合条件的元素返回undefined
           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
}

vuex实现简单的购物车功能

vuex实现简单的购物车功能

来源:https://blog.csdn.net/zjsfdx/article/details/88109624

标签:vuex,购物车
0
投稿

猜你喜欢

  • python使用suds调用webservice接口的方法

    2022-12-22 06:44:18
  • PyTorch中Tensor的数据类型和运算的使用

    2023-01-04 14:53:21
  • 在go中使用omitempty的代码实例

    2024-04-25 15:12:47
  • MySQL数据库中删除重复记录的方法总结[推荐]

    2024-01-13 07:13:45
  • 谈谈XHTML中CDATA

    2007-09-17 12:45:00
  • IE对CSS样式表的限制和解决方案

    2008-04-28 12:27:00
  • python 测试实现方法

    2023-03-24 11:34:04
  • python中Requests发送json格式的post请求方法

    2021-05-24 10:09:45
  • MySQL 编码机制

    2024-01-14 23:52:38
  • python-docx文件定位读取过程(尝试替换)

    2022-03-05 14:41:19
  • Python Selenium模块安装使用教程详解

    2021-10-06 02:23:25
  • Python字符串详细介绍

    2023-08-29 09:15:09
  • perl 简明教程 perl教程集合

    2023-08-08 19:58:12
  • mysql启动报错MySQL server PID file could not be found

    2024-01-22 18:41:59
  • Python组合数据类型详解

    2022-10-03 02:23:47
  • javascript实现花样轮播效果

    2024-05-25 15:19:20
  • 简单了解python调用其他脚本方法实例

    2022-12-07 08:53:36
  • MySQL大量脏数据如何只保留最新的一条(最新推荐)

    2024-01-25 22:41:04
  • JS实现选项卡实例详解

    2024-04-19 10:43:37
  • IE6模拟max-width对图片缩放

    2008-03-16 14:32:00
  • asp之家 网络编程 m.aspxhome.com