使用Vuex实现购物车

Vuex是一个应用状态管理库。当涉及大量状态需要多个组件共享时,可以采用Vuex。当进行一些小项目开发时,涉及组件传值时,或者项目非常小,组件间共享状态不多的情况下,此时可以使用简单的store模式或者其它方式。

在一些中大型单页应用程序中,需要解决多个视图依赖同一状态,来自不同视图的行为需要变更同一状态的问题,所有满足这两个条件的项目和业务,建议使用Vuex进行状态管理。

典型的购物车案例,涉及多个子组件依赖同一个状态和来自不同视图的一些行为需要改变同一个状态值。此案例主要实现商品列表的显示,主要有增加和删除商品、增加和减少商品数量、实时显示购物车里面总的商品数量和总价格。

使用时,需要将商品列表组件Product.vue和购物车列表组件Cart.vue在App.vue中引入,并在Vuex的store文件夹下的cart.js中定义好商品数据 all_products和已添加到购物车的商品数据selected,然后将该模块放入index.js文件的modules对象中,将数据通过getters导出,将方法通过actions和mutations导出。

cart.js文件代码如下:

// store/cart.js
//所有购物车共享数据
const state={
    //商品数据
   all_products: [
       { id:1,name: '电视',price: 5000},
       { id:2,name: '冰箱',price: 8000},
       { id:3,name: '平板',price: 6000},
       { id:4,name: '手机',price: 1500},
       { id:5,name: '耳机,price: 120},
   ],
   //已选的商品数据
   selected: []
}

//将数据导出
const getters={
   //商品数据
   products: state=>state.all_products,
  //购物车中数据
  cartProducts: state=>{
      return state.selected.map(item=>{
          let curProducts=state.all_products.find(i=>i.id===item.id);
          let count=item.count;
          return {
               ...curProducts,count
           }
       })
    },
  //总价
  totalPrice: (state,getters)=>{
       let total=0;
       getters.cartProducts.forEach(item=>{
            total+=item.price*item.count;
       });
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值