Vue项目中购物车模块是如何实现的?

参考:用vuex实现购物车
vue+vuex实现购物车功能

1、首先我这个购物车模块实现了什么功能?

  1. 点击详情页中的商品数据,数据添加到购物车中
  2. 在购物车中展示商品的名称、单价和数量
  3. 具有选择功能,可以选择或者取消选中,可以全选或者取消全选,可以只计算选中的商品的总价,以及确定是否选中商品

2、逻辑整理

首先购物车静态页面的实现通过四个组件来实现,每个商品的详细信息单独作为一个组件,购物车中商品列表的展示作为一个组件,底部全选以及结算按钮等也作为一个组件,最后将这些子组件引入整体的购物车页面组件。
通过vuex状态管理机制来实现购物车的数据交互,创建store文件并挂载在vue实例上,在store文件中定义一个可以挂载数据的state,在其中定义一个数组cartList来存放商品信息,其他组件就可以获取并使用这个数据了。

功能1如何实现

点击商品加入购物车,需要对state中的cartList进行修改,采用mutations方法修改state中的数据,但是mutations只能处理同步问题,此时可采用actions方法来处理异步问题。
在我做的这个商城系统中,只在商品详情页设置了加入购物车功能,在具体实现时,将mapActions引入详情页组件,点击加入购物车就会执行store文件中actions对象里定义的加入购物车方法,actions对象中对加入的商品进行判断,若之前商品已存在,则数量加1,若商品不存在,则将商品添加进cartList。其返回一个promise对象。

功能2如何实现

在功能1中,我们已经将加入购物车中的商品对象放到cartList中了,商品对象中包括需要在购物车中展示的详细信息。**将mapGetters引入购物车商品列表展示组件中,来接收vuex中的数据。同时通过v-for来对cartList中的商品对象进行遍历,同时展示单个商品信息的组件通过props来接收父组件传来的单个商品对象;**在计算属性computed中接收vuex中挂载的数据。mapGetters实际上是将store中的getters属性映射过来,getters实际上跟vue的computed属性差不多,通过数据通过getters进一步处理,得到我们想要的值,因为我需要知道存放商品信息的数组数据以及其长度,所以将其放在getters中

功能3如何实现

依旧通过mapGetters来接收vuex中的数据。对于保存商品的cartList数组,通过数组的filter方法找出选中的商品 ,然后通过数组的reduce方法对选中商品的价值总额进行计算;全选的逻辑:若部分商品或者全部商品未被选中,则利用forEach使cartList中的每个商品为选中状态;若全部选中,则使cartList中的每个商品为未选中状态

猜你喜欢

转载自blog.csdn.net/weixin_43912756/article/details/108276159