「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现

本篇教程将带你实现一个简易购物车功能。通过使用接口定义商品结构,我们将创建一个动态购物车,支持商品的添加、移除以及实时总价计算。

在这里插入图片描述


关键词
  • UI互动应用
  • 接口定义
  • 购物车功能
  • 动态计算
  • 商品管理
  • 列表操作

一、功能说明

简易购物车功能包含以下交互:

  1. 商品添加:将商品从商品列表添加到购物车。
  2. 商品移除:从购物车中移除指定商品。
  3. 动态总价计算:实时计算购物车内商品的总价。
  4. 列表展示:动态展示商品和购物车内容。

二、所需组件
  • @Entry@Component 装饰器
  • ListListItem 组件用于商品和购物车列表展示
  • RowColumn 布局组件
  • Text 组件用于展示商品信息和总价
  • Button 组件用于添加和移除商品
  • @State 修饰符用于状态管理

三、项目结构
  • 项目名称SimpleShoppingCart
  • 自定义组件名称ShoppingCartPage
  • 代码文件ProductInterface.etsShoppingCartPage.etsIndex.ets

四、代码实现
1. 定义商品接口
// 文件名:ProductInterface.etsexport interface Product {name: string; // 商品名称price: number; // 商品价格
}

2. 购物车页面代码
// 文件名:ShoppingCartPage.etsimport { Product } from './ProductInterface';@Component
export struct ShoppingCartPage {@State cartItems: Product[] = []; // 购物车商品列表@State totalPrice: number = 0; // 总价private items: Product[] = this.loadProducts(); // 加载商品列表// 从接口加载商品loadProducts(): Product[] {return [{ name: '苹果', price: 5 },{ name: '橙子', price: 7 },{ name: '香蕉', price: 3 },];}// 添加商品到购物车addItem(item: Product): void {this.cartItems.push(item);this.updateTotalPrice();}// 从购物车移除商品removeItem(index: number): void {this.cartItems.splice(index, 1);this.updateTotalPrice();}// 更新总价updateTotalPrice(): void {this.totalPrice = this.cartItems.reduce((sum, item) => sum + item.price, 0);}build(): void {Column({ space: 20 }) {Text('简易购物车').fontSize(24).fontWeight(FontWeight.Bold).alignSelf(ItemAlign.Center);// 商品列表ForEach(this.items, (item: Product) => {Row({ space: 10 }) {Text(`${item.name} - ¥${item.price}`).fontSize(18);Button('添加商品').onClick(() => this.addItem(item)).width(100);}.margin({ top: 10 });});// 购物车展示Text('购物车').fontSize(20).margin({ top: 20 });List({ space: 10 }) {ForEach(this.cartItems, (item: Product, index) => {ListItem() {Row({ space: 10 }) {Text(`${item.name} - ¥${item.price}`).fontSize(18);Button('移除').onClick(() => this.removeItem(index)).width(80);}}});}.width('100%');// 显示总价Text(`总价: ¥${this.totalPrice}`).fontSize(20).margin({ top: 20 });}.padding(20).width('100%').height('100%');}
}

3. 主入口文件
// 文件名:Index.etsimport { ShoppingCartPage } from './ShoppingCartPage';@Entry
@Component
struct Index {build() {Column() {ShoppingCartPage() // 调用购物车页面}.padding(20);}
}

效果示例:用户可以动态添加商品到购物车,移除商品,并实时查看购物车的总价。

效果展示
在这里插入图片描述


五、代码解读
  1. 商品接口定义

    • 使用 Product 接口定义商品的结构,包含 nameprice 两个属性。
  2. 商品列表展示

    • 使用 ForEach 遍历商品数组,动态生成商品名称和“添加商品”按钮。
  3. 购物车操作

    • addItem() 将商品添加到购物车数组,removeItem() 从购物车数组中删除商品。
  4. 动态总价计算

    • updateTotalPrice() 使用 reduce 函数动态计算购物车商品的总价。
  5. 状态管理

    • 使用 @State 修饰符管理购物车商品列表和总价,实现界面和数据的实时更新。

六、优化建议
  1. 添加商品搜索功能,便于用户快速查找商品。
  2. 支持商品数量调整,而非仅仅添加或移除。
  3. 提供总价折扣功能,提升用户体验。

七、效果展示
  • 动态商品添加与移除:用户可以灵活添加或移除商品。
  • 实时总价更新:购物车总价实时计算并显示。
  • 直观的界面布局:清晰展示商品列表和购物车内容。

八、相关知识点
  • 「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List和Grid组件展示数据列表
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text和Button组件详解

小结

通过本篇教程,用户学会了通过接口定义商品结构,结合状态管理和列表操作,实现动态的购物车功能,为构建复杂的商品管理类应用打下基础。


下一篇预告

在下一篇「UI互动应用篇26 - 数字填色游戏」中,我们将学习如何实现一个互动式的数字填色小游戏,进一步提升用户界面的趣味性和互动性。


上一篇: 「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
下一篇: 「Mac畅玩鸿蒙与硬件49」UI互动应用篇26 - 数字填色游戏

作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=613
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


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

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

相关文章

快速下载pytorch_geometric

注意:千万不要一上去就使用pip去安装!!! 1.找到GitHub手动下载所需依赖: https://github.com/pyg-team/pytorch_geometric 进入网址后点击此处: 2.点击here进去后寻找自己的torch版本(我的是torch2.1.2的…

微服务-1 认识微服务

目录​​​​​​​ 1 认识微服务 1.1 单体架构 1.2 微服务 1.3 SpringCloud 2 服务拆分原则 2.1 什么时候拆 2.2 怎么拆 2.3 服务调用 3. 服务注册与发现 3.1 注册中心原理 3.2 Nacos注册中心 3.3 服务注册 3.3.1 添加依赖 3.3.2 配置Nacos 3.3.3 启动服务实例 …

低代码开发中 DDD 领域驱动的页面权限控制

在低代码开发的领域中,应用安全与灵活性是两大关键考量因素。领域驱动设计(DDD)作为一种在软件设计领域广泛应用且颇具影响力的方法论,正逐渐在低代码开发的页面权限控制方面展现出其独特的价值与潜力。本文旨在客观地探讨如何借助…

找到一个linux静态库动态库的好资料.3

# 正文 继续整理从这个页面学到的东西:https://tldp.org/HOWTO/Program-Library-HOWTO。 之前的在这里:找到一个linux静态库动态库的好资料.0找到一个linux静态库动态库的好资料.1找到一个linux静态库动态库的好资料.2 这一篇继续看这个: https://tldp…

nginx 基于 geoip 模块限制地区访问

1、安装 geoip 库 [rootVM-0-15-centos ~]# yum -y install geoip geoip-devel 2、下载并安装 MaxMind 的免费 GeoIP 数据库。这里我选择下载 GeoLite2 数据库,适用于大多数应用。 访问 maxmind 官网(https://www.maxmind.com/)&#xff0c…

openfeign-一些配置

之前整理过一篇 openfeign的快速使用。openfeign简化服务间调用-笔记-CSDN博客 今天补充一下一些个性化配置。 一 日志: 默认的openfeign不输出日志,想看日志需要单独配置下。 日志级别 public static enum Level {NONE,BASIC,HEADERS,FULL;private…

【回溯】LeetCode经典题目总结:组合、排列、子集、分割、N皇后、单词搜索

回溯 组合问题组合总和全排列子集分割回文串N皇后电话号码的字母组合单词搜索括号生成 组合问题 给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 树形结构&#xff1…

HEIC 是什么图片格式?如何把 iPhone 中的 HEIC 转为 JPG?

在 iPhone 拍摄照片时,默认的图片格式为 HEIC。虽然 HEIC 格式具有高压缩比、高画质等优点,但在某些设备或软件上可能存在兼容性问题。因此,将 HEIC 格式转换为更为通用的 JPG 格式就显得很有必要。本教程将介绍如何使用简鹿格式工厂&#xf…

【实战示例】面向对象的需求建模

前言 博主准备写一个以面向对象为核心思想的软件需求建模、领域建模的系列,总结一整套可落地的DDD的打法,前面几篇文章论述了如何进行面向对象的需求建模,本文将以一个简单的购物商城的需求来演示如何进行面向对象的需求建模。 面向对象的需…

04-微服务02

我们将黑马商城拆分为5个微服务: 用户服务 商品服务 购物车服务 交易服务 支付服务 由于每个微服务都有不同的地址或端口,相信大家在与前端联调的时候发现了一些问题: 请求不同数据时要访问不同的入口,需要维护多个入口地址…

Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤

一、概述 记录时间 [2024-12-25] 本文讲述如何在 Windows 11 中进行 Node.js 工具的安装和配置。 以下是详细的步骤和说明。 二、安装 Node.js 1. 官网下载 通过官网,下载 Node.js,上面有好几种下载方式,文中下载的是 zip 压缩包。 如图&…

Element-plus自动导入

安装 npm i element-plus 自动引入 1. 安装两个插件 npm install -D unplugin-vue-components unplugin-auto-import2. 配置插件 vue3项目修改vite.config.js,把两个插件添加入即可,注意:不是覆盖原有配置 Vite // vite.config.js import { define…

基于FISCO BCOS的电子签章系统

概述 本项目致力于构建一个安全、高效且功能完备的电子印章系统,通过整合区块链技术与传统数据库管理,为用户提供了可靠的电子签章解决方案,有效应对传统电子签章系统的数据安全隐患,满足企业和个人在数字化办公环境下对电子文档…

【2025最新计算机毕业设计】基于SpringBoot+Vue在线考试系统(源码包运行)【提供源码+答辩PPT+文档+项目部署】

作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

如何设置Edge浏览器访问软件

使用Edge浏览器访问分销ERP A\V系列软件时会出现各种报错,如何设置Edge浏览器使其正常访问,请看下面的具体操作。 一、打开Edge浏览器,点击右上角的 设置及其他,如图: 二、在弹出界面中,点击 扩展&#xff…

[创业之路-222]:波士顿矩阵与GE矩阵在业务组合选中作用、优缺点比较

目录 一、波士顿矩阵 1、基本原理 2、各象限产品的定义及战略对策 3、应用 4、优点与局限性 二、技术成熟度模型与产品生命周期模型的配对 1、技术成熟度模型 2、产品生命周期模型 3、技术成熟度模型与产品生命周期模型的配对 三、产品生命周期与产品类型的对应关系 …

计算机图形学知识点汇总

一、计算机图形学定义与内容 1.图形 图形分为“图”和“形”两部分。 其中,“形”指形体或形状,存在于客观世界和虚拟世界,它的本质是“表示”;而图则是包含几何信息与属性信息的点、线等基本图元构成的画面,用于表达…

Tomcat介绍、下载安装、使用(部署项目)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

2024.12.29(进程线程实现并发服务器)

作业 多进程多线程并发服务器实现一遍提交。 服务器 #include <myhead.h> #define PORT 12345 #define IP "192.168.124.123"void *fun(void *fd) {int newfd *(int *)fd;char buff[1024];while(1){int res recv(newfd,buff,sizeof(buff),0);if(res 0){p…

初学STM32 ---高级定时器互补输出带死区控制

互补输出&#xff0c;还带死区控制&#xff0c;什么意思&#xff1f; 带死区控制的互补输出应用之H桥 捕获/比较通道的输出部分&#xff08;通道1至3&#xff09; 死区时间计算 举个栗子&#xff08;F1为例&#xff09;&#xff1a;DTG[7:0]250&#xff0c;250即二进制&#x…