Vue3电商项目实战-购物车模块2【04-头部购物车-商品列表-本地、05-头部购物车-删除操作-本地、06-购物车页面-基础布局】
创始人
2024-05-28 14:09:08
0

文章目录

    • 04-头部购物车-商品列表-本地
    • 05-头部购物车-删除操作-本地
    • 06-购物车页面-基础布局


04-头部购物车-商品列表-本地

目的:根据本地存储的商品获取最新的库存价格和有效状态。

大致步骤:

  • 定义获取最新信息的API
  • 定义修改购物车商品信息的mutations
  • 定义获取购物车列表信息的actions
  • 在头部购物车组件初始化的时候更新列表信息

落的代码:

  • 定义获取最新信息的API src/api/cart.js
import request from '@/utils/request'/*** 获取新的商品信息* @param {String} skuId - 商品SKUID* @returns Promise*/
export const getNewCartGoods = (skuId) => {return request(`/goods/stock/${skuId}`, 'get')
}
定义修改购物车商品信息的mutations src/store/module/cart.js// 修改购物车商品updateCart (state, goods) {// goods中字段有可能不完整,goods有的信息才去修改。// 1. goods中必需又skuId,才能找到对应的商品信息const updateGoods = state.list.find(item => item.skuId === goods.skuId)for (const key in goods) {if (goods[key] !== null && goods[key] !== undefined && goods[key] !== '') {updateGoods[key] = goods[key]}}}
  • 定义获取购物车列表信息的actions src/store/module/cart.js
    // 获取购物车列表findCartList (ctx) {return new Promise((resolve, reject) => {if (ctx.rootState.user.profile.token) {// 登录 TODO} else {// 本地// Promise.all() 可以并列发送多个请求,等所有请求成功,调用then// Promise.race() 可以并列发送多个请求,等最快的请求成功,调用then// 传参事promise数组const promiseArr = ctx.state.list.map(item => {// 返回接口函数的调用return getNewCartGoods(item.skuId)})Promise.all(promiseArr).then(dataArr => {dataArr.forEach((data, i) => {ctx.commit('updateCart', { skuId: ctx.state.list[i].skuId, ...data.result })})resolve()}).catch(e => {reject(e)})}})},
  • 再头部购物车组件初始化的时候更新列表信息 src/components/app-header-cart.vue
  setup () {const store = useStore()store.dispatch('cart/findCartList')}

05-头部购物车-删除操作-本地

目的:完成头部购物车删除操作,支持未登录状态。

大致步骤:

  • 编写mutaions删除购物车商品逻辑
  • 编写actions进行删除操作
  • 在头部购物车进行删除逻辑

落的代码:

  • vuex的mutations和actions代码 src/store/module/cart.js
  mutations: {// ... 省略// 删除购物车商品deleteCart (state, skuId) {const index = state.list.findIndex(item => item.skuId === skuId)state.list.splice(index, 1)}},
  actions: {// ... 省略// 删除购物车商品deleteCart (ctx, skuId) {return new Promise((resolve, reject) => {if (ctx.rootState.user.profile.token) {// 登录 TODO} else {// 本地ctx.commit('deleteCart', skuId)resolve()}})},
  • 头部组件实现删除逻辑 src/components/app-header-cart.vue
+ 购物车无商品不显示弹出层,并且不是在购物车页面
+
+ 绑定点击事件传入skuId
+
  setup () {// 删除const deleteCart = (skuId) => {store.dispatch('cart/deleteCart', skuId).then(() => {Message({ type: 'success', text: '删除成功' })}).catch(e => {Message({ type: 'error', text: '删除失败' })})}return { deleteCart }}

06-购物车页面-基础布局

目的:完成购物车组件基础布局和路由配置与跳转链接。

在这里插入图片描述

大致步骤:

  • 完成头部组件,购物车图标,购物车结算按钮,点击跳转购物车路由。商品点击跳转详情的操作。
  • 配置购物车路由和组件,完成基础布局。

落的代码:

  • 跳转功能 src/components/app-header-cart.vue
    
+      {{$store.getters['cart/validTotal']}}
        
+
  去购物车结算
  • 组件与路由 src/views/cart/index.vue



相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...