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 = 0this.food.forEach(el => {sum = el.money * el.content+sum})return sum}},

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

 四、完结

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

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

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

相关文章

2024-03-24 需求分析-智能问答系统-调研

一. 需求列表 基于本地知识库的问答系统对接外围系统 数字人语音识别二. 待调研的公司 2.1 音视贝 AI智能外呼_大模型智能客服系统_大模型知识库系统_杭州音视贝 (yinshibei.com) 2.2 得助智能 智能AI客服机器人-智能电话机器人客服-电话电销机器人-得助智能 (51ima.com) 2…

数据库中使用IN操作效率问题

1. IN操作的基本概念 IN操作符在SQL中用于指定某个字段的值是否匹配列表中的任何值。这是一个条件操作符&#xff0c;用于在WHERE子句中过滤记录。 SQL语法示例&#xff1a; SELECT * FROM table_name WHERE column_name IN (value1, value2, ...); 2. IN操作的效率问题 当…

关于所谓全能的小讨论

大家好&#xff0c;我是阿赵。   认识我的朋友应该都知道&#xff0c;阿赵我是IT民工&#xff0c;平时上班时间很长。所以我自己是特别珍惜周末的时间的。每次到了周末&#xff0c;我都会做很多事情&#xff0c;基本上是比上班还忙。   我会做的事情很多&#xff0c;比如教…

Debezium日常分享系列之:Debezium2.5稳定版本之MySQL连接器配置示例和Connector参数详解

Debezium日常分享系列之&#xff1a;Debezium2.5稳定版本之MySQL连接器配置示例和Connector参数详解 一、MySQL 连接器配置示例二、添加连接器配置三、连接器属性四、必须的连接器配置属性五、高级 MySQL 连接器配置属性六、Debezium 连接器数据库架构历史配置属性七、用于配置…

LabVIEW比例流量阀自动测试系统

LabVIEW比例流量阀自动测试系统 开发了一套基于LabVIEW编程和PLC控制的比例流量阀自动测试系统。通过引入改进的FCMAC算法至测试回路的压力控制系统&#xff0c;有效提升了压力控制效果&#xff0c;展现了系统的设计理念和实现方法。 项目背景&#xff1a; 比例流量阀在液压…

代码注意事项

1、派生类自定义构造函数需继承父类构造 #include<iostream> using namespace std;class Shape { public: //构造函数&#xff0c;需要释放Shape(int m,int n){s_m m;s_n n;}//虚函数virtual int area()0;//普通成员函数&#xff0c;待会打印void printScreen(){cout&…

使用 chezmoi vscode, 管理你的 dotfiles

什么是 dotfiles In Unix-like operating systems, any file or folder that starts with a dot character (for example, /home/user/.config), commonly called a dot file or dotfile. 任何以 . 开头去命名的文件或者目录都可以称为 dotfile, 在 Unix-like 系统一般用的比较…

Mysql数据库深入理解

目录 一、什么是数据库 二、Mysql基本架构图 1.Mysql客户端/服务器架构 2.客户端与服务器的连接过程 3.服务器处理客户端请求 4.一条查询SQL执行顺序 4.1连接器 4.2查询缓存 4.3解析器 4.4执行器 4.4.1预处理阶段 4.4.2优化阶段 4.4.3执行阶段 5.一条记录如何存…

外包干了4年,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【十六】MySQL数据库设计篇

MySQL数据库设计篇 概述 做服务端开发离不开数据库设计&#xff0c;虽然说服务端技术一直在革新&#xff0c;但是MySQL一直都是我们首选使用的关系型数据库。服务端开发一直以来都是采用数据驱动研发的思想&#xff0c;可见数据库设计是非常重要的&#xff0c;数据库设计的好坏…

python笔记基础--类(6)

目录 1.创建和使用类 1.1根据类创建实例 2.使用类和实例 3.继承 3.1子类的继承方法__init__() 3.2给子类定义属性和方法 3.3重写父类方法 3.4将实例用例作属性 4.导入类 实例化&#xff1a;根据类创建对象 1.创建和使用类 创建Dog类&#xff0c;每个实例都存储名字和…

Zookeeper实现分布式锁(Zk分布式锁)

文章目录 概述如何用Zookeeper实现分布式锁Zk分布式锁原理和实现Zookeeper实现分布式锁Java代码 概述 基于zookeeper临时有序节点可以实现的分布式锁。 1、zookeeper天生设计定位就是分布式协调&#xff0c;强一致性。锁的模型健壮、简单易用、适合做分布式锁。 2、如果获取不…

01.重新认识文件(Linux基本概念)

知识引入&#xff1a; 我们经常使用word或者wps写的论文、作业等都是文件&#xff0c;而我们这样对文件的认识也比较片面。我们是否思考过&#xff0c;如果文件里面没有写东西&#xff0c;那么计算机会不会保存呢&#xff1f;答案是&#xff0c;肯定会的。因为我们每次建的空文…

Linux下对线程的认识+生产消费者模型+信号量

线程的概念 线程是进程内部中更加轻量化的一种执行流。线程是CPU调度的基本单位&#xff0c;而进程是承担系统资源的实体。就是说一个进程中可能会有多个线程&#xff0c;而在Linux内核中并没有真正重新的创建线程并重新进行资源分配&#xff0c;因为我们每个线程指向的资源都是…

力扣---最长回文子串---二维动态规划

二维动态规划思路&#xff1a; 首先&#xff0c;刚做完这道题&#xff1a;力扣---最长有效括号---动态规划&#xff0c;栈-CSDN博客&#xff0c;所以会有一种冲动&#xff0c;设立g[i]&#xff0c;表示以第i位为结尾的最长回文子串长度&#xff0c;然后再遍历一遍取最大长度即可…

【图解物联网】第8章 物联网与机器人

8.1 由设备到机器人 把我们身边形形色色的“物”都连接到互联网&#xff0c;这就是物联网。物联网中使用的设备随着时间的推移在不断进化&#xff0c;这条进化之路的前方到底有什么呢&#xff1f;这里我们就围绕其中一种形式&#xff0c;即机器人来对讨论一下这个问题。 8.1…

(Node+Express+vue)常量抽取

好久没来更新了&#xff0c;最近在用node整项目。。。 定义一个名为constant.js文件&#xff0c;用来存放项目的常量信息。 // 定义一个常量对象 const obj {// 默认请求成功DEFAULT_SUCCESS: {code: 1001,msg: },// 默认请求失败DEFAULT_ERROR: {code: 1002,msg: 系统错误},…

lin_20240321_calculating_rG4score.R

1.使用上一步的结果来计算RG4 用法和脚本如下&#xff1a; ################################################################################ ################# Function used for the G4Hunter paper ######################### ######################################…

【C语言】指针基础

指针是C语言中的一个重要概念&#xff0c;也是其强大功能的核心之一。理解指针的基础知识对于编写高效、灵活的C语言程序至关重要。本文将介绍指针的基本概念、用法以及一些常见的技巧和注意事项&#xff0c;旨在帮助读者建立起对C语言指针的全面理解&#xff0c;并能够熟练地运…

Python程序设计 类与继承

一. 继承的概念 生活中的继承&#xff0c;一般指的是子女继承父辈的财产。 拓展1&#xff1a;经典类或旧式类 不由任意内置类型派生出的类&#xff0c;称之为经典类。 class 类名:代码...... 拓展2&#xff1a;新式类 # 父类A class A(object):def __init__(self):self.n…