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

目录

  • 一、配置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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试概念及分类整理汇总

前言 测试小伙伴在谈论软件测试分类,五花八门的分类,眼花缭乱。因为将各个维度划分的内容都整到一块了,在加上各自不同的见解与补充,各种冲突...... Findyou我经过多年测试总结基本定为4类测试(最多5类,自动化或者兼容…

Contingency Planning学习记录

Contingency Planning over Probabilistic Hybrid Obstacle Predictions for Autonomous Road Vehicles Contingency Planning over Probabilistic Hybrid Obstacle Predictions for Autonomous Road Vehicles - 知乎 Contingency Planning over Probabilistic Hybrid Obstac…

Java多线程并发篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、如何停止一个正在运行的线程二、notify()和notifyAll()有什么区别?三、sleep()和wait() 有什么区别?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用…

MaxKey 单点登录认证系统——开发环境部署

开发指南 | MaxKey单点登录认证系统 修改配置文件 application-maxkey.properties、application-maxkey-mgt.properties 配置nacos配置数据库 开发环境启动 1)MaxKey统一认证系统 maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyApplication.java 2)Max…

美餐支付 - PHP代碼实现

前言 背景 前段时间,因接手的项目需要实现 美餐支付 的功能对接 在此记录一下鄙人的实现步骤,方便有需要的道友参考借鉴 场景描述 我们的 “现代膳食” 售卖机,可以在屏幕上显示可配送的餐食 用户选中商品后,点击购买 选择 “美餐…

Jmeter 性能压测 —— 常遇问题与解决技巧!

问题1:如何在大并发测试下,让登录或者后续接口只执行一次? 分析: 这个问题网上的答案其实很多,但是大多不靠谱。 比如推荐使用仅一次控制器,但是仅一次控制器对线程组无效; 比如推荐跨线程组…

Sectigo的DV通配符https

Sectigo是近些年发展比较快速的CA认证机构,为了提升审核效率,在全国成立了审核机构,亚太审核中心的成立加快了Sectigo旗下的https证书的审核速度。Sectigo的https证书可以为网站安全提供有力支持,从而保护网站信息安全。今天就随S…

【REST2SQL】05 GO 操作 达梦 数据库

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 信创要求用国产数据库,刚好有项目用的达梦,研究一下go如何操作达梦数据库 1 准备工作 1.1 安…

02. Eureka、Nacos注册中心及负载均衡原理

01小节中订单服务远程调用用户服务案例实现了跨服务请求,在微服务中一个服务可能是集群部署的,也就是一个服务有多个实例,但是我们在调用服务时需要指定具体的服务实例才能调用该服务,在集群模式下,服务地址应该写哪个…

redis 从0到1完整学习 (十六):内存回收之 key 过期处理策略

文章目录 1. 引言2. redis 源码下载3. redisDb 结构体4. Redis 过期 key 的处理策略4.1 惰性删除 (Lazy Expiration)4.2 定期删除 (Active Expire / Periodic Expiration)* 5. 参考 1. 引言 前情提要: 《redis 从0到1完整学习 (一)&#xff…

2024年如何使用WordPress构建克隆Udemy市场

您想创建像 Udemy 这样的学习管理 (LMS) 网站吗?最好的学习管理系统工具LifterLMS将帮助您制作像Udemy市场这样的 LMS 网站。 目录 Udemy市场是什么? 创建 Udemy 克隆所需的几项强制性技术: 步骤 1) 注册您的域名 步骤 2) 获取虚拟主…

JHipster - Spring Boot 的快速开发利器

产品介绍: JHipster是一个开源的、全面的应用程序生成器,它能够帮助开发者快速生成Spring Boot Angular/React/Vue.js的完整应用程序。它不仅提供了一个简单的界面来定义应用程序的配置,还提供了一组强大的代码生成器,可以在数分…

Taro+vue3 实现电影切换列表

1.需求 我们在做类似于猫眼电影的小程序或者H5 的时候 我们会做到那种 左右滑动的电影列表,这种列表一般带有电影场次 2.效果 3.说明 这种效果在淘票票 猫眼电影上 都有的 ,一般电影类型的H5 或者小程序 这个是都有的 第一是好看 第二是客观性比较好 …

Python 工具 | conda 基本命令

Hi,大家好,我是源于花海。本文主要了解 Python 的工具的 conda 相关的基本命令。Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。在Windows下,需要安装…

杨中科 ASP.NET Core 中的依赖注入的使用

ASP.NET CORE中服务注入的地方 1、在ASP.NET Core项目中一般不需要自己创建ServiceCollection、IServiceProvider。在Program.cs的builder.Build()之前向builderServices中注入 2、在Controller中可以通过构造方法注入服 务。 3、演示 新建一个calculator类 注入 新建TestC…

使用 PHP-FFMpeg 操作视频/音频文件

做音频合成的时候找到的一个php操作ffmpeg 的类库。GitHub地址:https://github.com/PHP-FFMpeg/PHP-FFMpeg/。本文的例子大部分都是上面的 在使用之前请安装好 FFMpeg 。如何安装?请看 FFmpeg 安装教程。 使用composer快速安装 > composer require …

Arcgis像元统计数据

目录 单幅影像统计多幅影像统计 单幅影像统计 现有一幅NDVI影像,如何知道影像中NDVI的分布情况呢? 先栅格转点,然后在属性表中查看汇总情况 还有一种方法就是在ENVI中打开, -0.3-0.338占据了99% 多幅影像统计 现有多幅NDVI影…

设置flex布局的元素,其子元素宽度和超过其本身时,其宽度值未被撑起问题

如图父元素main-content设置了display:flex. 里面包含了不确定个数的子元素,子元素样式为: flex: 1; min-width: 240px;现在想获取父元素的宽度,发现无论子元素的个数为多少,父元素的宽度都是一样的大小,并没有被子元…

使用 CompletableFuture 分批处理任务

一、无返回值任务函数 // 数据分批 List<List<StatisticsDTO>> batches Lists.partition(statisticsList, BATCH_SIZE); List<CompletableFuture<Void>> futures new ArrayList<>(batches.size());// 数据处理 for (int i 0; i < batches…

初学者的基本 Python 面试问题和答案

文章目录 专栏导读1、什么是Python&#xff1f;列出 Python 在技术领域的一些流行应用。2、在目前场景下使用Python语言作为工具有什么好处&#xff1f;3、Python是编译型语言还是解释型语言&#xff1f;4、Python 中的“#”符号有什么作用&#xff1f;5、可变数据类型和不可变…