【uniapp】利用Vuex实现购物车功能

news2024/10/7 8:30:06

实战项目名称:实现购物车功能

文章目录

  • 一、实战步骤
    • 1. 先编辑`store.js`文件
    • 2. 定义方法和基本的结构
    • 3. 编写`SETSHPPING`
  • 二、在项目中调用
    • 1. 触发相应的`mutations`
    • 2. 利用`computed`计算数量和总价的方法


提示:本实战内容大部分为具体实现的思路,界面方面暂时不公布。

一、实战步骤

1. 先编辑store.js文件

代码如下(示例):

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
	state: {
		ShoppingCart: []
	},
	mutations: {
		SETSHPPING(state, product) {
		//后面再讲解具体实现
		},
	},
	actions: {},
	modules: {}
})

export default store

2. 定义方法和基本的结构

object的基本结构:
{ id: “601a73e0ab8a25000ad243fe”, name: “特濃比利時朱古力”, total: 1, price: 100}

在这里插入图片描述

代码如下(示例):

// 对应增加数量
			add()
				this.sum += 1   // sum是想买的数量
				var pPrice = null     //这里是为了处理有没有特价处理的商品
				if (this.arr.special_price === null) {
					//没有特价则直接用price
					pPrice = this.arr.price
				} else {
				  //是特价则用special_price
					pPrice = this.arr.special_price
				}
				let list = {
					id: this.arr._id,   //商品id
					name: this.arr.name[0].text,   //商品名称
					total: this.sum,    //商品数量
					price: pPrice    //商品价格
				}
				console.log(list)
	// mock数据
	// { id: "601a73e0ab8a25000ad243fe", name: "特濃比利時朱古力", total: 1, price: 100}

// 减少数量的方法基本一致
// 只需将this.sum += 1改为 this.sum -= 1

3. 编写SETSHPPING

实现购物车的方法有很多,在这里就主要下面这一种 (思路)

    1. 先看看购物车中,是否已经有了某件产品,有的话返回产品的index下标;
    1. 如果index的值-1,则不存在有重复的产品,反之我们就利用splice()移除相应下标的值;
    1. 产品数量只有在不为0的基础上,才会更新到ShoppingCart

当然除了这一种方法还有其他,有人可能会问,为什么要整个删除再添加上去新的呢,直接改掉下标相应的total值不就行了吗?
其实,只更新total数量值是不行的,因为产品的各属性每一秒都有可能发生改变,所以整个替换掉是更符合开发逻辑的

代码如下(示例):

SETSHPPING(state, product) {
			let arr = store.state.ShoppingCart
			// 先看看购物车中,是否已经有了某件产品,有的话返回产品的index下标
			let index = arr.findIndex(item => {
				return item.id == product.id;
			});
			// console.log(index)
			// 如果index的值-1,则不存在有重复的产品,反之我们就移除相应下标的值
			if (index != -1) {
				arr.splice(index, 1)
			}
			// 产品数量只有在不为0的基础上,才会更新到ShoppingCart中
			if (product.total != 0) {
				state.ShoppingCart.push(product)
			}

			// console.log(state.ShoppingCart)

		},

二、在项目中调用

1. 触发相应的mutations

代码如下(示例):

// 这里的list就是上方提到的产品信息
    let list = {
			id: this.arr._id,   //商品id
			name: this.arr.name[0].text,   //商品名称
			total: this.sum,    //商品数量
			price: pPrice    //商品价格
	}
// 通过下方的commit,我们就可以触发mutations,进行下一步
this.$store.commit('SETSHPPING',list) 

2. 利用computed计算数量和总价的方法

利用computed可以达到购物车数据的动态更新

computed:{
	//计算购物车产品的总数量
			total(){
				let arr = this.$store.state.ShoppingCart
				var sum = 0
				arr.map( (item) => {
					sum += item.total
				})
				return sum
			},
	// 计算购物车的总价
			price(){
				let arr = this.$store.state.ShoppingCart
				var a = 0
				arr.map( (item) => {
					a += item.total * item.price
				})
				return a
			}
	}


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

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

相关文章

C语言 2 —— 常量

常量是什么? 常量就是在程序运行过程中,值不会发生改变,而且一眼可以辨识出值的量。 如: 20,‘a’ , 3.1415926 , "helloworld" 常量的分类: 整形,浮点型,字符型&#…

成电860考研专业课考前划重点-学长课程音频转文字-用科大讯飞花钱买的-三万五千字

成电860考研专业课考前划重点-学长课程音频转文字。 这个是我2021年把视频的音频扒下来后用科大讯飞音频转文字网站上花了几十块钱买的。 说话人1 03:04 对有回放,我这边开回放了,大家可以让大家下载,然后我怕这边回放有问题,大家…

Airtest poco 入门小结

目录 一、poco介绍 1、poco能做什么 2、三种定位方式 1)基本选择器 2)相对选择器 3)空间顺序选择器 4)正则表达式方式 3、poco支持平台 二、Airtest介绍 1、Airtest能做什么 2、Airtest不能做什么 3、Airtest的图像识别…

发挥数字化平台优势,电子元器件采购商城系统助力企业改变固有低效流程

我国是全球最大的电子元器件生产国,电子元器件在国民经济发展中占据着重要地位。近年来,随着数字经济的快速发展,电子元器件的需求量也在不断升高,但疫情与国际环境对电子元器件产业要素流通仍然造成了一定困扰。在此背景下&#…

win10系统下使用onnxruntime部署yolov5模型

文章目录前言一、环境1、硬件2、软件二、YOLO模型三、新建Qt项目1、pro文件2、mainwindow.h3、mainwindow.cpp四、YOLO 类封装1、yolov5.h2、yolov5.cpp3、class.names五、效果前言 上一篇介绍过使用opencv-dnn模块实现模型推理部署,但视频效果较差,本篇…

ps2023最新版免费滤镜插件Exposure安装下载教程

滤镜插件是ps的重要功能之一,它主要是用来制作不同的图片特效。那么,ps滤镜插件哪些好用,ps滤镜插件如何获取,下面我们一起来学习这些内容。 ps滤镜插件是比较多的,下面对几款常见的ps滤镜插件进行讲解,看…

TIA博途中的TRACE功能具体使用方法示例

TIA博途中的TRACE功能具体使用方法示例 我们可以利用TRACE曲线来监控程序、排查故障,那么具体怎样使用呢,可以参考以下内容。 如下图所示,打开TIA博途,新建项目后,在左侧项目树中可以看到TRACES, 如下图所示,双击添加新轨迹,然后在右侧窗口中,添加需要监视的信号,…

TOUGH2系列建模方法及在CO2地质封存、水文地球化学、地热、地下水污染等领域中的技术

TOUGH2系列软件是由美国劳伦斯伯克利实验室开发的,旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同,TOUGH2系列软件采用模块化设计和有限积分差网格剖分方法,通过配合不同EOS模块,软件…

【矩阵论】3. 矩阵函数——矩阵函数求导

3.6 矩阵函数求导 3.6.1 积分与求导定义 设 mnm\times nmn 阶矩阵 A(x)(aij(x))mnA(x)\left(a_{ij}(x)\right)_{m\times n}A(x)(aij​(x))mn​ 中的元素都是 x 的可导函数,则 A(x)A(x)A(x) 为关于 xxx 的求导为: A′(A)dA(x)dx(daij(x)dx)mnA(A)\frac{…

正点原子stm32F407学习笔记5——串口通信实验

一、串口通信实验1 上位机给开发板发送数据,开发板将收到的数据发回给上位机 串口设置的一般步骤可以总结为如下几个步骤: 串口时钟使能,GPIO 时钟使能。设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。GPIO 初始化设置&#…

数据库性能翻3倍:Redis on Flash分层存储技术是如何做到的?

Redis on flash简介:Redis on Flash 涉及到的是Redis的分层存储技术,即将数据存放在不同地方。Redis自2016年以来支持Redis on Flash。从2019年开始, Redis企业版(Redis Enterprise)宣布支持英特尔Optane DC持久性内存&#xff0c…

基于NB-IoT的智能垃圾桶系统设计与实现

本设计是基于物联网的智能垃圾桶,主要实现以下功能: 1,压力传感器模块采集垃圾重量数据; 2,GPS定位模块采集垃圾桶所在的经纬度数据; 3,人体红外模块检测人体并返回是否有人通过的数据&#xf…

会议管理系统SSM记录(二)

目录: (1)整合Freemarker (2)用户登录 (3)提取头部 (4)提取菜单抽取 (1)整合Freemarker 在pom.xml中加入Freemark依赖: 创建free…

HTML+CSS大作业:基于HMTL校园学校网页设计题材【我的学校网站】

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

专精特新企业三个层级

专精特新企业也是分层级的。工信部2022年6月印发《优质中小企业梯度培育管理暂行办法》里面明确提出中小企业培育的3个梯度,分别是创新型中小企业、专精特新中小企业和专精特新小巨人企业,刚好构成中小企业发展层级金字塔。这就意味着企业想要发展崛起&a…

19 04-读取DTC快照信息

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,19服务作为UDS中子功能最多的服务,一共有28种子功能,本文将介绍常用的19 04服务:读取快照信息。 关联文章: 19服务List 19 01-通过状态掩码读取DTC数目 $19服务:DTC…

1.2 C++编译器对指针的解释方式(深度理解c++指针)

1.2 指针 1.2.1 指针解释方式 从内存的角度,一个指向类对象的指针与一个指向整数类型的指针或一个指向数组的指针,三者之间是没有任何区别的,它们内部都只存储了一个机器地址值(word)。不同类型指针的区别仅在于其寻址出来的object类型的不…

div+css布局实现个人网页设计(HTML期末作业)

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Spring源码深度解析:七、bean的加载① - doGetBean概述

我们先通过getBean()流程图,来了解Spring的getBean()方法的工作流程,接着根据这个工作流程一步一步的阅读源码 一、前言 文章目录:Spring源码分析:文章目录 getBean()方法是spring ioc的核心,阅读getBean()方法的源…

【Spring Boot+Vue.js+JPA+Mysql】实现前后端分离的名片系统(附源码 超详细必看 可作为大作业使用)

需要项目源码请点赞关注收藏后评论区留言并且私信~~~ 一、项目简介 前后端分离的核心思想时前端页面通过掉用后端的RESTfulApI进行数据交互。本次项目使用Spring BootSpring Data JPA实现后端系统,使用Vue.js实现前端系统,数据库采用mysql,集…