微信小程序171~180

1.封装购物车接口API
import http from '@/utils/http'export const reqAddCrt = ({ goodsId, count, ...data }) => {return http.get(`/cart/addToCart/${goodsId}/${count}`, data)
}export const reqCartList = () => {return http.get('/cart/getCartList')
}export const reqUpdateChecked = ({ goodsId, isChecked }) => {return http.get(`/cart/checkCart/${goodsId}/${isChecked}`)
}export const reqCheckAllStatus = (isChecked) => {return http.get(`/cart/checkAllCart/${isChecked}`)
}export const reqDelCartGoods = (goodsId) => {return http.get(`/cart/delete/${goodsId}`)
}
2.模板分析和渲染
  1. 若点击加入购物车,则将当前商品加入购物车
  2. 若点击立即购买,要跳转到结算支付页面,立即购买
  3. 如果是立即购买,不支持购买多个商品
  data: {goodsInfo: {},show: false,count: 1,blessing: '',buyNow: 0},// 加入购物车handleAddcart() {this.setData({show: true,buyNow: 0})},// 立即购买handeGotoBuy() {this.setData({show: true,buyNow: 1})},
3.让页面和store对象建立关联

使用BehaviorWithStore让页面和store建立关联

import { BehaviorWithStore } from 'mobx-miniprogram-bindings'
import { userstore } from '@/stores/userstore'
export const userBehavior = BehaviorWithStore({storeBindings: {store: userStore,fields: ['token']}
})
4.加入购物车和立即购买区分处理

在这里插入图片描述

  // 监听是否更改了购买数量onChangeGoodsCount(event) {this.setData({count: Number(event.detail)})},// 确定按钮触发事件处理函数async handlerSubmit() {const { token, count, blessing, buyNow } = this.dataconst goodsId = this.goodsId// 判断用户是否进行了登录if (!token) {wx.navigateTo({url: '/pages/login/login'})return}// 如果buynow是0,加入购物车// 如果buynow是1,立即购买if (buyNow === 0) {const res = await reqAddCart({ goodsId, count, blessing })if (res.code === 200) {wx.toast({ title: '加入购物车成功' })this.setData({show: false})}} else {wx.navigateTo({url: `/pages/order/detail/detail?goodsId=${goodsId}&blessing=${blessing}`})}}
5.展示购物车购买数量

加入购物车成功以后,重新计算购物车商品的购买数量
this.getCartCount()

 // 计算商品的数量getCartCount() {// 用token判断用户是否进行了登录if(!this.data.token) return// 计算购买的数量const res = await reqCartList()// 判断购物车中是否存在商品if(res.data.length !== 0) {// 累加得出商品数量let allCount = 0res.data.forEach((item) => {allCount += item.count})this.setData({// info要求属性值为字符串类型// 而且如果购买的数量大于99,页面上显示99+allCount: ( allCount > 99 ? '99+' : allCount ) + ''})}},
6.购物车关联Store对象
import { ComponentWithStore } from 'mobx-miniprogram-bindings'
import { userStore } from '@/stores/userstore'
ComponentWithStore({storeBindings: {store: userStore,fields: ['token']},// 组件的初始数据data: {cartList: [1, 2, 3, 4],emptyDes: '还没有添加商品,快去添加吧~'},// 组件的方法列表methods: {// 如果用Component方法构建页面,声明周期写到methods中才行onShow() {console.log(this.data.token)}}
})
7.获取购物车列表数据并渲染
  1. 如果没有进行登录,购物车页面需要展示文案:您尚未登录,点击登录获取更多权益
  2. 如果用户进行登录,获取购物车列表数据
  • 1:购物车没有商品,展示文案: 还没有添加商品,快去添加吧~
  • 2:购物车列表有数据,需要使用数据对页面进行渲染
  // 展示文案同时获取购物车列表数据async showTipGetList() {const { token } = this.dataif (!token) {this.setData({emptyDes: '您尚未登录,点击登录获取更多权益',cartList: []})return}// 如果登录,获取数据const { code, data, cartList } = await reqCartList()if (code === 200) {this.setData({cartList,emptyDes: cartList.length === 0 && '还没有添加商品,快去添加吧~'})}},// 如果用Component方法构建页面,声明周期写到methods中才行onShow() {this.showTipGetList()}}
8.更新商品的购买状态

获取商品的最新状态并同步到服务器

   // 更新商品的购买状态async updateChecked(event) {// 获取最新购买状态const { detail } = event// 获取传递的商品id及索引const { id, index } = event.target.dataset// 将最新的购买状态转化为后端需要的0和1const isChecked = detail ? 1 : 0const res = await reqUpdateChecked(id, isChecked)if (res.code === 200) {// 找到对应索引的商品更改购买状态this.setData({[`cartList[${index}].isChecked`]: isChecked})}},
9.控制全选按钮的选中状态

基于购物车列表中已有的数据,产生一个新数据,控制全选按钮的选中效果,可以使用计算属性来实现

npm install --save miniprogram-computed
  // 定义计算属性,控制全选按钮的选中效果computed: {//computed中不能用this访问data的数据selectAllStatus(data) {// 如果购物车里有商品在进行计算return data.cartList.length !== 0 && data.cartList.every((item) => item.isChecked === 1)}},
10.全选和全不选功能

先绑定事件,获取选中状态,转换成0和1,调用接口将本地数据也更新

  // 全选和全不选功能async selectAllStatus(event) {const { detail } = eventconst isChecked = detail ? 1 : 0//调用接口await reqCheckAllStatus(isChecked)if (res.code === 200) {// 第一种方法//   this.showTipGetList()// 第二种方法// 对购物车列表进行深拷贝,对新数组进行遍历const newCartList = JSON.parse(JSON.stringify(this.data.cartList))newCartList.forEach((item) => (item.isChecked = isChecked))// 对cartList进行赋值,驱动视图更新this.setData({cartList: newCartList})}},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90150.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改 docker 容器的挂载配置(保持数据不丢的情况)

一、核心原理Docker 容器的运行时配置(包括挂载)是启动时确定的,一旦启动无法直接修改。因此,需通过以下步骤实现:保存原容器中的数据(避免丢失);基于原镜像创建新容器,同…

MVCC(多版本并发控制)介绍及实现原理

一、什么是MVCC? MVCC(Multi-Version Concurrency Control,多版本并发控制)是数据库中用于解决并发访问问题的一种机制。它通过为数据维护多个版本,让读写操作在不同版本上独立进行,从而避免了传统锁机制中…

密码学基础概念详解:从古典加密到现代密码体系

一、引言:为什么我们需要密码学? 在数字化时代,信息已成为核心生产要素,而信息安全则是保障社会运转的基石。当我们在电商平台输入银行卡密码时,当我们通过即时通讯工具发送私密消息时,当企业在云端存储核心…

小鹏汽车视觉算法面试30问全景精解

小鹏汽车视觉算法面试30问全景精解 ——智能驾驶 车路协同 视觉创新:小鹏汽车视觉算法面试核心考点全览 前言 小鹏汽车作为中国智能电动汽车的创新引领者,致力于通过AI与自动驾驶技术推动智能出行的变革。小鹏视觉算法团队深耕自动驾驶感知、车路协同、智能座舱、3D重建…

程序是如何生成的-以c语言为例

一,序言 从代码到能跑的程序,整个过程就像 “把外文翻译成母语,再组装成能直接用的东西”,一步步来更清楚: 源代码(程序员写的代码,如C语言文件)↓ 预处理(处理#开头的命…

风险识别清单:构建动态化的风险管理体系

在项目管理实践中,风险识别是确保项目成功的关键环节。PMBOK提出的风险提示清单(Prompt List)为项目团队提供了一个系统化的思考框架,帮助突破个人经验局限,实现更全面的风险覆盖。这一工具的价值不仅在于其提供的标准…

从“点状用例”到“质量生态”:现代软件测试的演进、困局与破局

测试的三次范式跃迁业务高速迭代下的四大困局质量工程化:流程、平台、度量三位一体左移与右移:把缺陷扼杀在摇篮,也把监控铺到坟墓自动化金字塔的再平衡:UI、API、单元、契约、e2e数据驱动测试:从“拍脑袋”到“科学实…

【C++】继承和多态扩展学习

目录 1. 菱形虚拟继承原理剖析 1.1.虚基表 2. 单继承和多继承的虚函数表深入探索 2.1 单继承虚函数表深入探索 2.2 多继承虚函数表深入探索 ​编辑 2.3 菱形继承、菱形虚拟继承 3. 继承和多态考察的一些常见问题 1. 菱形虚拟继承原理剖析 继承的文章中我们讲到C的多继承…

Visual Studio Code 远端云服务器开发使用指南

目录 一、下载安装 1、官方下载 2、下载加速方案 二、基于Ubuntu系统的开发环境搭建方案 1、开发环境配置 2、云服务器架构 3、工作流程关系 4、总结 三、推荐插件 1、免配置插件 1. Remote-SSH - 远程登录Linux服务器 2. C/C - 必备的C/C开发插件 3. C/C Extensi…

技术演进中的开发沉思-41 MFC系列:定制 AppWizard

MFC开发,最为重要的无非就是用“MFC AppWizard” 对话框做开发了,第一次使用感觉像拆收音机的孩子 —— 左边是项目类型选择,右边是一堆打勾的选项,点完 “完成”,屏幕上就冒出了能直接编译运行的窗口程序。那时还不知…

Libevent(3)之使用教程(2)创建事件

Libevent(3)之使用教程(2)创建事件 Author: Once Day Date: 2025年6月29日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 本文档翻译于:Fast portable non-bl…

Kotlin 作用域函数 let 的实现原理

Kotlin 中的 let 是一个 标准库扩展函数,它广泛用于作用域函数(Scope Functions)中,尤其适用于对可空对象(nullable)做非空判断并执行代码块的场景。 示例代码 val name: String? "123" name?…

从FDTD仿真到光学神经网络:机器学习在光子器件设计中的前沿应用工坊

FDTD仿真与光学神经网络的基础概念 FDTD(时域有限差分)是一种数值方法,用于求解麦克斯韦方程组,广泛应用于光子器件设计。光学神经网络通过光波导、衍射元件等物理结构实现矩阵运算,具有低能耗、高并行的优势。 机器学…

在Ubutu22系统上面离线安装Go语言环境【教程】

0.引言 Go语言(又称Golang)是Google开发的一种静态强类型、编译型、并发型编程语言,由Robert Griesemer、Rob Pike和Ken Thompson于2007年开始设计,2009年正式发布。 1.到官网下载压缩包 2.从win10系统离线上传压缩包给ubuntu22…

CMake实践:CMake3.30版本之前和之后链接boost的方式差异

目录 1.背景 2.boost引入CMake时机 3.CMake 3.30 之前(含 3.29)链接 Boost 的方式 4.CMake 3.30 及之后链接 Boost 的方式 5.CMake3.30后引入Boost的步骤 6.迁移建议(3.30 之前 → 3.30 之后) 7.CMake 3.30 移除FindBoost的…

告别挂马风险!PBootCMS完美替代方案BadouCMS

开发企业网站时一直比较喜欢用pbootcms,标签套用很简单,使用也方便。 但是pbootcms一直有被挂马的问题,官方好像也不怎么更新了!换过好几个cms,比如eyoucms、dedecms、帝国等等,感觉都不怎么能用得习惯,还…

开发者如何集成AI绘画?智创聚合API简化Midjourney接入

在 AI 绘画领域,Midjourney 的大名如雷贯耳,其强大的图像生成能力,能将我们脑海中的奇思妙想,迅速转化为精美的视觉画面,深受设计师、艺术家以及广大创意爱好者的青睐。然而,使用 Midjourney 的过程中&…

pycharm回车、删除、方向键和快捷键等不能使用原因

解决方法 :菜单栏中的Tools取消勾选Vim Emulator 原因 :新版的pycharm安装中,默认安装了vim扩展,一旦安装了pycharm在编写代码时会默认使用Vim编辑器

修复ffmpeg.dll丢失错误|6种解决ffmpeg.dll方法详细教程

看到电脑提示“ffmpeg.dll丢失”,很多人会懵。ffmpeg.dll 是个处理视频、音频的关键文件。它要是没了或坏了,软件就打不开或直接闪退。常见原因是软件安装不全、文件被删、或者中病毒。下面说说它是干嘛的,再给解决办法。一.ffmpeg.dll 到底是…

OkHttp 与 Stetho 结合使用:打造强大的 Android 网络调试工具链

前言在 Android 应用开发过程中,网络请求的调试一直是一个重要但具有挑战性的环节。Facebook 开发的 Stetho 是一个强大的调试工具,当它与 OkHttp 结合使用时,可以为我们提供前所未有的网络请求洞察能力。本文将详细介绍如何将这两者结合使用…