uniapp微信小程序_购物车_下单页面

 先说下整体逻辑以方便总体理解
 1、首先画出下单页面
 2、此次画出结算价格页面
 3、怎么点击下完单变成结算页面?其实就是把下单页面的信息传递给结算页面就行
 问题难点?
点击加号的时候把物品加入一个数组传到下单页面,但是点击的时候不能把所有物品加上,需要把重复的物品转换成数量
点击减号为0的时候需要减去商品,使用过滤api过滤掉次数为0的就相当于删除次数为0的商品
最后将物品总价使用computed一算就可以

 一、解决购物车加购的时候重复问题

	mergeDuplicateItems(cartItems) {
				// 创建一个空对象来存储合并后的商品  
				const mergedItems = {};
				// 遍历购物车中的每个商品  
				cartItems.forEach(item => {
					// 使用商品名称作为键来查找是否存在该商品  
					const existingItem = mergedItems[item.name];
					if (existingItem) {
						// 把这边的点击次数传出去
						existingItem.content = item.content;
					} else {
						// 如果商品不存在,则将其添加到合并后的对象中  
						mergedItems[item.name] = {
							...item
						};
					}
				});
				// 将合并后的对象转换回数组  
				// 把汉字就去掉了
				const mergedCartItems = Object.values(mergedItems);
				return mergedCartItems;
			},

以上把加购重复的商品加购进去

	mergedItems[item.name] = {
							...item
						};

这个解释一下

mergedCartItems是这个但是得转换一下
{  
    exampleName1: { name: 'exampleName1', value: 'value1' },  
    exampleName2: { name: 'exampleName2', value: 'value2' },  
    exampleName3: { name: 'exampleName3', value: 'value3' }  
}


Object.values(mergedItems);使用这个转换一下就下面这种了


[  
    { name: 'exampleName1', value: 'value1' },  
    { name: 'exampleName2', value: 'value2' },  
    { name: 'exampleName3', value: 'value3' }  
]

Object.values() - JavaScript | MDN (mozilla.org)这是api官方解释

二、加购商品 减少商品

	// 加号
			increaseCount(index) {
				// 加号次数增加
				this.food[index].content++
				// 加号显示
				this.food[index].showDelete = true;
				// 将点的餐加入购买的订单
				this.cart.push(this.food[index])
				// 有重复的处理成一个
				this.mergedCart = this.mergeDuplicateItems(this.cart);
				//过滤,当点击的次数等于0的时候将次数不等于0的过滤出来,就是相当于删除了次数等于0的商品
				let filteredFood = this.mergedCart.filter(item => item.content !== 0);
				// 转换成字符串
				this.cartstring = JSON.stringify(filteredFood)
			},
			// 减号
			deletegoods(index) {
				this.food[index].content--
				if (this.food[index].content > 0) {
					// 将加完之后的结果传入mergeDuplicateItems函数减的话就是把次数传过去
					this.mergedCart = this.mergeDuplicateItems(this.cart);
					let filteredFood = this.mergedCart.filter(item => item.content !== 0);
					this.cartstring = JSON.stringify(filteredFood)
				}
				if (this.food[index].content == 0) {
					this.food[index].showDelete = false;
					//过滤,当点击的次数等于0的时候将次数不等于0的过滤出来,就是相当于删除了次数等于0的商品
					let filteredFood = this.food.filter(item => item.content !== 0);
					this.mergedCart = this.mergeDuplicateItems(filteredFood);
					this.cartstring = JSON.stringify(this.mergedCart)
				}
			}

1.首先定义一个传过去得数组cart再把需要得商品加到购物车里面cart

data:{
cart: [],
}
this.cart.push(this.food[index])
				// 有重复的处理成一个
this.mergedCart = this.mergeDuplicateItems(this.cart);
//过滤,当点击的次数等于0的时候将次数不等于0的过滤出来,就是相当于删除了次数等于0的商品
let filteredFood = this.mergedCart.filter(item => item.content !== 0);
				// 转换成字符串
this.cartstring = JSON.stringify(filteredFood)

let filteredFood = this.mergedCart.filter(item => item.content !== 0);还得过滤一下不然把之前没有的还会加进去,减商品也一样。

三、算出总价格 

	<!-- 加购的食物 -->
			<view class="addFood">
				<view class="foodDetail" v-for="(item,index) in food">
					<image :src="item.imgUrl" class="foodImagel"></image>
					<view class="Afternoon">
						<view class="">
							<view class="AfternoonText">
								{{item.name}}
							</view>
							<view class="recommend">
								默认:×{{item.content}}
							</view>
						</view>
						<view class="">
							<view class="foodMoney">
								<text class="symbol">¥</text><text>{{item.money}}</text>
							</view>
						</view>
					</view>
				</view>
			</view>
	<!-- 底部支付 -->
		<view class="foot">
			<view class="foodMoney">
				<text class="symbol">¥</text><text>{{addPrice}}</text>
			</view>
			<view class="lijiyuyue" @click="lijiyuyue1">
				立即支付
			</view>
		</view>



computed: {
			// 价格的总价
			addPrice() {
				var sum = 0
				this.food.forEach(el => {
					sum = el.money * el.content+sum
				})
				return sum
			}
		},

 这个简单:computed定义总的价格addprice,然后直接引用这个变量,就是数量乘以价格加上之前累积得就可以了

 四、完结

大哥们要是有更简单可以一起探讨学习下

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

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

相关文章

SpringMVC | Spring MVC中的“拦截器”

目录: 拦截器 &#xff1a;1. 拦截器的 “概述”2. 拦截器的 “定义” (创建“拦截器”对象)3. 拦截器的 “配置” (让“拦截器”对象生效)4. 拦截器的 “执行流程”“单个拦截器”的执行流程“多个拦截器”的执行流程 作者简介 &#xff1a;一只大皮卡丘&#xff0c;计算机专业…

sentinel整合gateway实现服务限流

导入依赖: <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><…

LeetCode_Java_递归系列(题目+思路+代码)

206.反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]以此类推&#xff0c;直到反转结束返回头结点 class Solution {public ListNode rever…

仅用一个月,游卡完成从MySQL到上线OceanBase的实践

编者按&#xff1a;自2023年9月起&#xff0c;游卡——国内最早卡牌游戏研发者之一&#xff0c;开始测试OceanBase&#xff0c;并在短短两个月内成功将三个核心业务应用迁移至OceanBase上。究竟是何因素促使游卡放弃游戏行业普遍采用的MySQL方案&#xff0c;转而大胆选择OceanB…

微服务网关介绍

1. 为什么是Spring Cloud Gateway 一句话&#xff0c;Spring Cloud已经放弃Netflix Zuul了。现在Spring Cloud中引用的还是Zuul 1.x版本&#xff0c;而这个版本是基于过滤器的&#xff0c;是阻塞IO&#xff0c;不支持长连接。Zuul 2.x版本跟1.x的架构大一样&#xff0c;性能也有…

图像分割论文阅读:Adaptive Context Selection for Polyp Segmentation

这篇论文的主要内容是关于一种用于息肉分割的自适应上下文选择网络&#xff08;Adaptive Context Selection Network&#xff0c;简称ACSNet&#xff09; 1&#xff0c;模型的整体结构 模型的整体结构基于编码器-解码器框架&#xff0c;并且包含了三个关键模块&#xff1a;局部…

【文末附gpt升级4.0方案】FastGPT详解

FastGPT知识库结构讲解 FastGPT是一个基于GPT模型的知识库&#xff0c;它的结构可以分为以下几个部分&#xff1a; 1. 数据收集&#xff1a;FastGPT的知识库是通过从互联网上收集大量的文本数据来构建的。这些数据可以包括维基百科、新闻文章、论坛帖子等各种类型的文本。 2…

HTML静态网页成品作业(HTML+CSS+JS)——中华美食八大菜系介绍(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现图片轮播切换&#xff0c;共有1个页面。 二、…

探索国内ip切换App:打破网络限制

在国内网络环境中&#xff0c;有时我们会遇到一些限制或者屏蔽&#xff0c;使得我们无法自由访问一些网站或服务。而国内IP切换App的出现&#xff0c;为解决这些问题提供了非常便捷的方式。这些App可以帮助用户切换IP地址&#xff0c;让用户可以轻松地访问被限制或屏蔽的网站&a…

超越 GPT-4V 和 Gemini Pro!HyperGAI 发布最新多模态大模型 HPT,已开源

随着AI从有限数据迈向真实世界&#xff0c;极速增长的数据规模不仅赋予了模型令人惊喜的能力&#xff0c;也给多模态模型提供了更多的可能性。OpenAI在发布GPT-4V时就已经明确表示&#xff1a; 将额外模态&#xff08;如图像输入&#xff09;融入大语言模型&#xff08;LLMs&am…

鸿蒙一次开发,多端部署(一)简介

背景 随着终端设备形态日益多样化&#xff0c;分布式技术逐渐打破单一硬件边界&#xff0c;一个应用或服务&#xff0c;可以在不同的硬件设备之间随意调用、互助共享&#xff0c;让用户享受无缝的全场景体验。而作为应用开发者&#xff0c;广泛的设备类型也能为应用带来广大的…

Unity访问安卓(Android)或苹果(iOS)相册

1.下载Native Gallery for Android & iOS插件 2.在场景中添加截图按钮、选择图片按钮、选择视频按钮等 using OpenCVForUnity.CoreModule; using OpenCVForUnity.ImgprocModule; using OpenCVForUnity.UnityUtils; using System.Collections; using System.Collections.Gen…

线段树+暴力区修 P4145 上帝造题的七分钟 2 / 花神游历各国

传送门https://www.luogu.com.cn/problem/P4145 这道题着实想了好久&#xff0c;本来想的是用数学方法找规律&#xff0c;结果写了好久&#xff0c;发现想假了&#xff0c;于是只好看思路&#xff0c;暴力区修&#xff01;原因是被开根号一定次数就会变成1&#xff0c;是有限的…

安卓studio连接手机之后,一两秒之后就自动断开了。问题解决。

太坑了&#xff0c;安卓studio链接手机之后。几秒之后就断开了。我以为是adb的问题&#xff0c;就重新安装了一下adb。并且在环境变量中配置了Path的路径。然而并没有什么用啊。 后来查看是wps的服务和ADB有冲突。直接把WPS卸载掉之后就没有出现链接手机闪现的的问题。

网络通信——IP地址、端口号、协议(TCP、UDP)

通信架构 网络通信三要素 IP地址 IPv4地址 IPv6地址 IP域名 IP常识 端口号 概念 协议 开放式网络互联标准&#xff1a;OSI、TCP/IP 传输层的2个通信协议——UDP、TCP TCP协议&#xff1a;三次握手建立建立可靠连接 进行三次握手的原因&#xff1a;为了确保客户端和服务端…

在基于Android相机预览的CV应用程序中使用 OpenCL

查看&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9.0在Android 开发简介 下一篇&#xff1a;在 MacOS 中安装 本指南旨在帮助您在基于 Android 相机预览的 CV 应用程序中使用 OpenCL ™。教程是为 Android Studio 20…

复习斐波那契(用C++写)

或者这样写&#xff1a; 斐波那契数列 题目描述 斐波那契数列是指这样的数列&#xff1a;数列的第一个和第二个数都为 1 1 1&#xff0c;接下来每个数都等于前面 2 2 2 个数之和。 给出一个正整数 a a a&#xff0c;要求斐波那契数列中第 a a a 个数是多少。 输入格式…

霍格沃兹测试开发从人员外包到测试工具、测试平台,提供全方位的测试解决方案~

随着学社的学员越来越多&#xff0c;影响力越来越大&#xff0c;不停有学员和企业问我们&#xff1a;能否提供人员外包服务&#xff1f;与此同时&#xff0c;企业对于外包人员的业务技能要求也越来越高&#xff0c;寻找一个稳定靠谱的供应商也成了很多学员所在公司的需求。对此…

SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…

树莓派夜视摄像头拍摄红外LED灯

NoIR相机是一种特殊类型的红外摄像头&#xff0c;其名称来源于"No Infrared"的缩写。与普通的彩色摄像头不同&#xff0c;NoIR相机具备红外摄影和低光条件下摄影的能力。 一般摄像头能够感知可见光&#xff0c;并用于普通摄影和视频拍摄。而NoIR相机则在设计上去除了…