前端项目-09-购物车-游客列表-变更选中状态-删除

news/2024/7/10 2:31:19 标签: 前端, vue, javascript

目录

1-加入购物车成功

 2-购物车成功页面跳转

 3-游客身份获取购物车列表

4-动态渲染购物车列表

5-处理商品数量

6-删除购物车商品

6.1-删除购物车单个商品

6.2-删除全部选中商品

7-修改产品状态

7.1-修改单个产品的状态​编辑

7.2-修改多个产品的状态


1-加入购物车成功

      当用户点击添加到购物车按钮,会发起两个操作,1-调用后台接口,添加到购物车,2-跳转到添加到购物车成功页面。上一篇文章已经解决了派发action等到store中接口返回成功或者失败消息,现在需要跳转到页面,并且渲染信息到购物车页面。


 图片中相关信息,尤其是商品的名字,图片,描述等都是详情页面已经获取到的,需要在加入购物车成功页面展示,详情页面接口中有一个对象skuInfo包含这些信息;数量skuNum可以从跳转过程中作为query参数带过来,但是skuInfo是一个对象,不方便作为query参数传递,我们使用浏览器存储功能,存储有本地存储localStorage和会话存储sessionStorage;localStorage是持久性存储,并且一般有大小限制;会话存储是临时存储,会话页面关系,数据就删除了。

本次需求只是展示购买成功页面显示,所以采用sessionStorage来进行存储;存储后然后在购物车成功页面取出展示出来。



 

2-购物车成功页面跳转

       点击购物车成功页面的查看商品详情按钮和去购物车结算按钮,分别需要进行路由跳转,点击查看商品详情需要跳转到商品详情页面,点击去购物车结算需要跳转到购物车页面。直接使用router-link的to进行跳转;详情组件已经有了,但是购物车页面的组件我们需要配置,先配置购物车组件,进行路由跳转。

 3-游客身份获取购物车列表

       用户点击去购物车结算,需要展示用户添加到购物车的所有商品信息,需要调用后台获取购物车列表。因此用户点击商品详情页面中的添加到购物车,需要带上用户唯一标识userTempId,如果用户没有登录(游客)需要带上userTempId,请求头header中带上这个参数,这样服务端就能识别是哪个游客加入什么商品到购物车中。而且这个userTempId不是会话存储,需用持久化,所以使用localStorage。
      开发思路:1-先封装生成用户唯一标识userTempId的函数;2-请求头带上userTempId参数给服务器(尤其是详情页面添加商品到购物车必须带上userTempId识别用户,所以我们在detail的仓库文件中定义获取生成userTempId的uuid方法)然后在请求配置文件中请求头配置带上userTempId参数,这样获取购物车列表就会带上userTempId参数,获取到添加到购物车的商品信息。


写api->写store->注册store到大仓库(如果没有注册)->写action->派发action

 

 

4-动态渲染购物车列表

请求服务端后,服务器返回的数据结构如下:
 

 根据服务器返回的数据结构,我们先使用getters来简化数据操作...然后循环遍历数组,获取对应的数据,注意如果对象为空,要给默认值的问题。 

 获取购物车商品信息,如果undefined,默认为[]

遍历数组获取信息,动态渲染

判断全选标志和动态渲染购物车总价

5-处理商品数量

      当用户点击购物车列表页面每个商品的+或者-,需要向服务器发送请求;接口文档中对skuNum的描述为正数代表增加,负数代表减少...如果某个商品用户初始加入购物车是5,然后数字改为6;这是增加一个,skuNum传递给服务器是1;如果用户改为4,需要向服务器传递数据skuNum为-1;
ps:优化,如果disNum=0,可以不给服务器派发action,减少服务器请求次数。
addOrUpdateToCart的action是在detail仓库store文件中定义,在shopCart组件中也可以直接使用,不用重新在shopCart的仓库文件中定义新的action。

 

当用户点击变更数量过快,尤其是点击加减时,我们需要限流。采用lodash来限流,当时在三级菜单滑动过快的时候使用过。
import throttle from "lodash/throttle";

6-删除购物车商品

6.1-删除购物车单个商品

当用户点击购物车列表某个商品的删除按钮,需要删除对应的商品,删除后需要重新获取购物车列表。写api->写store->注册store到大仓库(如果没有注册)->写action->派发action。还是按照之前的套路,

6.2-删除全部选中商品

需求:当点击删除全部选中的商品的时候,需要删除购物车中全部选中的商品。

技术分析:目前后台接口只提供了单个商品的删除,我们点击选中的商品,一次性要删除多个,需要循环调用单个商品的删除。

技术难点1
我们在组件中派发删除所有商品action,在store文件中,我们开发action,我们需要循环删除单个商品的action,但是我们之前开发过删除单个商品的action,这里就需要解决action中调用其他action的问题,在action方法中,都自带了context对象,里面包含了很多对象信息,比如commit,state,dispatch,getters等信息;我们可以使用dispatch继续派发action来解决。

技术难点2
我们是删除多个商品,每个删除返回一个promise对象,我们需要将返回的promise对象放在数组中,只要全部成功,我们才返回成功,需要用到
Promise.all方法来解决。

7-修改产品状态

7.1-修改单个产品的状态

老套路:写api->组件派发action->写action-mutations(如果需要)-state(如果需要)->组件动态渲染(如果需要)

 

7.2-修改多个产品的状态

同样只有单个产品状态修改接口,没有批量修改产品状态接口,我们跟上面删除一样,也需要单个删除,并且返回promise判断成功失败,然后刷新列表。
ps1:全选按钮选中状态,优化,选中的条件还需要加上如果购物车为空,则不是选中状态

首先在全选按钮注册change事件,然后派发action....


http://www.niftyadmin.cn/n/229395.html

相关文章

数据一致性校验(pt-table-checksum)

介绍 pt-table-checksum 和 pt-table-sync 是 percona 公司发布的、检查 MySQL 主从数据库数据一致性校验的工具。pt-table-checksum 利用 MySQL 复制原理,在主库执行校验和计算,并对比主从库校验和,由此判断主从库数据是否一致。如果发现数…

国产SSD、内存卷哭国外大厂,三星宣布减产涨价在路上了

PC 圈有一句话是这么说的:论价格屠夫还得看国产品牌! 可不是嘛,国产长鑫、长江算是彻底将全球存储芯片市场搅局者这一「骂名」坐实了! 不说特别早期,前几年吧,普通单条 8G DDR4 内存都能卖到六七百元&…

《重构》:移除中间人(Remove Middle Man)/ 偶尔有用的迪米特建议

首先明确,Remove middle man 和 hide delegate 这两种重构技巧并不是对立面。 隐藏委托关系和移除中间人这两种重构技巧并不是相对立的,它们可以互相结合使用。 在某些情况下,使用隐藏委托关系能够将复杂度封装在一个类中,并提供一…

HTML学习(5)Canvas绘图

文章目录HTML5 CanvasHTML5 内联SVGHTML5 Canvas 使用 Canvas 进行绘图工作&#xff0c;Canvas元素用于在网页上绘制图片。 创建一个Canvas的元素&#xff1a; <canvas id"myCanvas" width"200" height"100"></canvas>但是Canvas…

信息系统项目管理师-项目采购管理

1.过程 1.1 规划采购管理 记录项目采购决策、明确采购方法&#xff0c;及识别潜在卖方的过程。 1.2 实施采购 获取卖方问答&#xff0c;选择卖方并授予合同的过程。 1.3 控制采购 管理采购关系&#xff0c;监督合同绩效、实施必要的变更和纠偏&#xff0c;以及关闭合同的过程。…

c++STL容器之序列式容器

目录 vector容器 vector对象的默认构造 vector的初始化 vector的遍历 vector的增删改查 vector末尾的添加移除操作 vector的数据存取 deque容器 deque对象的默认构造 deque末尾的添加移除操作 deque的数据存取 stack容器 stack对象的默认构造 stack的push()与po…

Zookeeper源码分析——ZK服务端初始化源码解析

持久化源码 快照 public interface SnapShot {/*** deserialize a data tree from the last valid snapshot and * return the last zxid that was deserialized* 反序列化方法*/long deserialize(DataTree dt, Map<Long, Integer> sessions) throws IOException;/*** …

asp.net车辆管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net车辆管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言开发 asp.net车辆管理系统VS开发sqlserver数…