商城小程序(7.加入购物车)

news2024/7/5 18:14:25

目录

  • 一、配置vuex
  • 二、创建购物车的store模块
  • 三、在商品详情页中使用store模块
  • 四、实现购加入购物车功能
  • 五、动态统计购物车中商品的总数量
  • 六、持久化存储购物车的商品
  • 七、优化商品详情页的total侦听器
  • 八、动态为tabBar页面设置数据徽标
  • 九、将设置tabBar徽标的代码抽离为mixins

一、配置vuex

新建store目录,并创建store.js文件用于管理vuex相关内容
在这里插入图片描述
在store.js中 初始化store的实例对象

// 1.导入vue和vuex
import {createStore} from 'vuex'
// 导入购物车的vue模块
import moduleCart from '@/store/cart.js'



// 3.创建store的实例对象
const store = createStore({
	modules: {
		// 购物车的vuex模块,模块内成员的访问路径被调整为m_cart
		'm_cart': moduleCart
	}
})

// 4.向外共享store的实例对象
export default store

在main.js 中导入store实例对象并挂载到vue的实例上

在这里插入图片描述

二、创建购物车的store模块

同样目录下创建cart.js模块
在这里插入图片描述

在cart.js中,初始化如下的vuex模块

export default {
	// 为当前模块开启命名空间
	namespaced: true,
	
	
	// 模块的state数据
	state: () => ({
		//购物车数组,用来存储购物车中每个商品的信息对象
		//每个商品的信息对象,都包含如下6个属性:
		//{goods_id  goods_name  goods_price  goods_count  goods_small_logo  goods_state}
		cart: []
	}),
	
	//模块的mutations方法
	mutations: {},
	
	// 模块的getters属性
	getters: {}
}

在store/store.js 模块中,导入并挂载购物车中的vue模块

在这里插入图片描述

三、在商品详情页中使用store模块

商品详情页面测试,是否能成功调用:

在这里插入图片描述
在这里插入图片描述

四、实现购加入购物车功能

在store目录下的cart.js模块中,封装一个将商品信息加入购物车的mutations方法,名为addToCart

	//模块的mutations方法
	mutations: {
		addToCart(state, goods){
			// 根据提交的商品Id,查询购物车中是否存在这个商品
			const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
			// 如果不存在,则findResult 为 undefined 否则,为查找到的商品信息对象
			if(!findResult) {
				//如果购物车中没有这件商品,则直接push
				state.cart.push(goods)
			} else {
				// 如果购物车中有这件商品,则只更新数量即可
				findResult.goods_count++
			}
		}
	},

在商品详细页面中,通过mapMutations这个辅助方法,把vuex中的m_cart模块下的addToCart方法映射到当前页面:
在这里插入图片描述

为商品导航组件 uni-goods-nav 绑定 @buttonClick=“buttonClick”事件处理函数:

在这里插入图片描述

五、动态统计购物车中商品的总数量

在cart.js模块中,在getters节点中定义一个total方法,用于统计购物车中商品的总数量

	// 模块的getters属性
	getters: {
		//统计购物车中商品的总数量
		total(state) {
			let c = 0
			//循环统计商品的数量,累加到变量c中
			state.cart.forEach(goods => c += goods.goods_count)
			return c
		}
	}

在商品详情页面的script标签中,按需导入mapGetters方法并进行使用
在这里插入图片描述

通过watch侦听器,监听计算属性total值的变化,从而动态为购物车按钮的徽标赋值

在这里插入图片描述

点击加入购物车 实现添加功能
在这里插入图片描述
在这里插入图片描述

六、持久化存储购物车的商品

在这里插入图片描述

修改cart.js 模块中的state函数,读取本地存储的购物车数据,对cart数组进行初始化
在这里插入图片描述

七、优化商品详情页的total侦听器

在这里插入图片描述
在这里插入图片描述

重新加载页面,就能成功回显

在这里插入图片描述

八、动态为tabBar页面设置数据徽标

把store中的total映射到cart.vue中使用:

在这里插入图片描述
在页面刚显示出来的时候,立即调用setBadge方法,为tabBar设置数字徽标
在这里插入图片描述

在methods中,声明setBadge方法,通过uni.setTabBarBadge()为tabBar设置数字徽记
在这里插入图片描述
点击进入购物车页面
在这里插入图片描述

九、将设置tabBar徽标的代码抽离为mixins

在这里插入图片描述
在这里插入图片描述

选中首页,分类等界面也会反应出购物车徽标
在这里插入图片描述

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

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

相关文章

在Spring Cloud Config Github配置中心

关于Spring Cloud系列我们其实讲解了很多,但是这里我们介绍一下Spring Cloud Config,它是一个解决分布式系统的配置管理方案,他包含了Client 和 Server 两个部分,server提供配置文件的存储,以接口的方式将配置文件内容…

【数据库】聊聊常见的索引优化-下

分页查询优化 主键排序 在实际的使用中,通过limit 10000,10 查询第10000记录到10010记录,mysql执行的时候是按照将前10010记录全部统计出来,然后剔除前10000条记录,选择后10条记录。这样来看的话,效率不高。 如果数据…

Java桶排序、基数排序、剪枝算法

桶排序算法 桶排序的基本思想是: 把数组 arr 划分为 n 个大小相同子区间(桶),每个子区间各自排序,最后合并 。计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况。 1.找出待…

企鹅目标检测数据集VOC格式400张

企鹅,一种可爱而独特的鸟类,以其圆滚滚的身体、黑白相间的羽毛和独特的行走方式而备受人们喜爱。 企鹅是鸟纲、企鹅科的动物,它们生活在南半球,特别是南极地区。企鹅的体型短而肥胖,有着流线型的身体和黑白相间的羽毛…

24/1/8

传奇登录界面; #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口设置this->setWindowTitle("传奇");//窗口名this->setWindowIcon(QIcon("C:\\Users\\21528\\Desktop\\图标.png"));//窗口图标th…

【Flutter 开发实战】Dart 基础篇:最基本的语法内容

在深入了解 Dart 这门编程语言之前,我们需要了解一些关于 Dart 的最基本的知识,像是常量、变量、函数等等,这样才能够让我们的开发效率更上一层楼。在本节,我们将探讨一些基础语法,包括入口方法 main、变量、常量以及命…

ERA5和GNSS站点不并址的处理方法二:垂直补偿(获得GNSS站点高度的PWV、温度和气压,基于matlab)

0. 码字不易,点赞加关注(公众号:WZZHHH,部分资料在公众号可以下载) Part1 垂直补偿的原因 我们在获取GNSS站点位置的PWV有很多方法,其中一个是利用ERA5数据进行积分得到。由于ERA5格网位置和GNSS不并址&am…

信息安全监管

安全政策 中央办公厅2003的27号文件 《国家信息化领导小组关于加强信息安全保障工作的意见》 方针:积极防御,综合防范 目标、要求:全面提高信息安全防护能力,保护公众利益,维护国家安全 4大原则: 立足…

为什么建筑设计师选择网络渲染“效果图“

网络渲染一般是指:云渲染,建筑设计行业通常需要渲染室内、室内等场景的效果图,一般大型场景渲染时非常消耗电脑算力,并且渲染时长也会通过效果图的场景、尺寸等来决定,本文为用户整理建筑设计师选择网络渲染的原因&…

孪生神经网络MATLAB实战[含源码]

​一、算法原理 孪生神经网络( Siamese neural network)是一种深度学习网络,它使用两个或多个具有相同架构、共享相同参数和权重的相同子网。孪生网络通常用于寻找两个可比较事物之间的关系的任务。孪生网络的一些常见应用包括面部识别、签名…

3.9 EXERCISES

矩阵加法需要两个输入矩阵A和B,并产生一个输出矩阵C。输出矩阵C的每个元素都是输入矩阵A和B的相应元素的总和,即C[i][j] A[i][j] B[i][j]。为了简单起见,我们将只处理元素为单精度浮点数的平方矩阵。编写一个矩阵加法内核和主机stub函数&am…

用红葡萄酿造的白葡萄酒是怎样的?

“由黑变白”这是“黑葡萄”的直译,代表一种由深蓝到黑葡萄制成的白葡萄酒,这种酿酒方式起源于法国,黑皮诺和莫尼尔的红葡萄一直被加工成白葡萄酒,作为香槟的基础。这是可能的,因为红色浆果通常果肉较轻。红色素&#…

TypeScript 从入门到进阶之基础篇(八)函数篇

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇TypeScript 从入门到进阶…

Java课程设计团队博客 —— 基于网页的时间管理系统

博客目录 1.项目简介2.项目采用的技术3.功能需求分析4.项目亮点5.主要功能截图6.Git地址7.总结 Java团队博客分工 姓名职务负责模块孙岚组长 资源文件路径和tomcat服务器的相关配置。 前端的页面设计与逻辑实现的代码编写。 Servlet前后端数据交互的编写。 用户登录和断开连接…

独立式键盘控制的4级变速流水灯

#include<reg51.h> // 包含51单片机寄存器定义的头文件 unsigned char speed; //储存流水灯的流动速度 sbit S1P1^4; //位定义S1为P1.4 sbit S2P1^5; //位定义S2为P1.5 sbit S3P1^6; //位定义S3为P1.6 sbit S4P1^7; //位…

熟悉HBase常用操作

1. 用Hadoop提供的HBase Shell命令完成以下任务 (1)列出HBase所有表的相关信息,如表名、创建时间等。 启动HBase: cd /usr/local/hbase bin/start-hbase.sh bin/hbase shell列出HBase所有表的信息: hbase(main):001:0> list(2)在终端输出指定表的所有记录数据。 …

鸿蒙原生应用/元服务开发-消息通知整体说明

应用/元服务可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知常见的使用场景&#xff1a;显示接收到的短消息、即时消息等。显示应用的推送消息&#xff0c;如广告、版本更新等。显示当前正在进行的事…

CCF模拟题 202309-1 坐标变换(其一)

问题描述 试题编号&#xff1a; 202309-1 试题名称&#xff1a; 坐标变换&#xff08;其一&#xff09; 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 对于平面直角坐标系上的坐标&#xff08;x,y&#xff09;&#xff0c;小P定义了一个包含…

代码随想Day60 | 84.柱状图中最大的矩形

84.柱状图中最大的矩形 这道题和接雨水遥相呼应&#xff0c;接雨水是求外部凹槽&#xff0c;这道题是求内部面积&#xff0c;这道题的整体思路是某一个元素&#xff0c;找到其左边的第一个小于该数的位置&#xff0c;右边的第一个小于该数的位置&#xff0c;然后以当前索引的高…

CodeWave智能开发平台--03--目标:应用创建--07供应商数据表格02

摘要 本文是网易数帆CodeWave智能开发平台系列的第10篇&#xff0c;主要介绍了基于CodeWave平台文档的新手入门进行学习&#xff0c;实现一个完整的应用&#xff0c;本文主要完成07供应商数据表格下 CodeWave智能开发平台的10次接触 CodeWave参考资源 网易数帆CodeWave开发…