鸿蒙仓颉语言开发实战教程:实现商品分类页

article/2025/6/15 6:02:57

今天继续为大家带来仓颉语言开发商城应用的实战教程,今天的内容是实现商品分类页。

分类页面要在基本布局的基础上增加一些动态效果,比如点击状态的切换和两个列表容器的联动。下面为大家详细介绍。

分类列表

先来看左侧的分类列表,很明显是一个List容器,样式上比较简单,只有一个文本,不过它有个点击状态的切换效果。

在添加组件之前,我们需要先请求到分类的数据,关于仓颉语言的网络请求上一篇文章已经分享过,下面再贴一下分类列表的网络请求具体代码,要注意的是,嵌套数据的修改需要使用ObservedArrayList修饰才能在页面上实时变化:

@State var classList:ObservedArrayList<ClassItem> = ObservedArrayList<ClassItem>()
let url = CJTools.url + "/api/class.php"
let httpRequest = createHttp()let option = HttpRequestOptions(method: RequestMethod.GET,expectDataType: HttpDataType.STRING,header: HashMap<String, String>([("content-type", "application/json")])
)
this.loading = true
httpRequest.request(url, {err, resp =>if (let Some(e) <- err) {CJTools.log('error:' + e.message)}if (let Some(r) <- resp) {let str = r.result.toString()let jValue = JsonValue.fromStr(str)let jArray = jValue.asArray()for (i in 0..jArray.size()) {var model = DataModel.fromJson(jArray.get(i).getOrThrow().asObject())var modelData = match (model) {case data: DataModelStruct => datacase _ => throw Exception("this data is not DataModelStruct")}let item = ClassItem(String.deserialize(modelData.get('id')), String.deserialize(modelData.get('classname')), String.deserialize(modelData.get('cover')))this.classList.append(item)}}this.loading = falsehttpRequest.destroy()},options:option)

请求之后最终classList是我们需要的数据,然后在List组件中遍历classList添加组件,仓颉中的循环遍历和ArkTs大不相同:

List{ForEach(this.classList,itemGeneratorFunc: {item: ClassItem, index: Int64 => ListItem {if(this.classIndex == index){Row(){Text(item.getClassname()).fontSize(15).fontColor(0x4a4a4a)}.width(100.percent).height(60).backgroundColor(Color.WHITE).alignItems(VerticalAlign.Center).justifyContent(FlexAlign.Center)}else {Row(){Text(item.getClassname()).fontSize(15).fontColor(Color.WHITE)}.width(100.percent).height(60).backgroundColor(Color.GRAY).alignItems(VerticalAlign.Center).justifyContent(FlexAlign.Center)}}})
}
.width(30.percent).height(100.percent)

商品列表

商品列表需要通过选择分类来获取数据,请求方式和上面的网络请求类似,这里只说一下页面布局,使用Grid容器就能轻松实现商品列表,注意如何设置网格的列数和间距:

Grid{ForEach(goodsList,itemGeneratorFunc: {item: GoodsItem, index: Int64 => GridItem {Column() {Image( item.getCover()).width(100.percent).height(120).margin(bottom: 4)Text(item.getName()).fontSize(14).textAlign(TextAlign.Start).fontWeight(FontWeight.W400)}.alignItems(HorizontalAlign.Start).onClick({evet => })}})
}
.width(70.percent).columnsTemplate('1fr 1fr').columnsGap(5).rowsGap(5).backgroundColor(0xFFFFFF).padding(right: 5, left: 5)

以上就是商品分类页面的内容介绍。#HarmonyOS语言##仓颉##购物#


http://www.hkcw.cn/article/aJxGJORPEI.shtml

相关文章

笔试模拟 day15

观前提醒&#xff1a; 笔试所有系列文章均是记录本人的笔试题思路与代码&#xff0c;从中得到的启发和从别人题解的学习到的地方&#xff0c;所以关于题目的解答&#xff0c;只是以本人能读懂为目标&#xff0c;如果大家觉得看不懂&#xff0c;那是正常的。如果对本文的某些知…

Linux防止误关机

Linux防止误关机 安装reboot-guard结果验证关机 安装reboot-guard 兼容python2和python3 https://github.com/stephanritscher/reboot-guard # 下载 wget -cP /usr/sbin/ https://raw.githubusercontent.com/stephanritscher/reboot-guard/refs/heads/master/rguard# 赋予可…

tomcat安装二进制版本

1.安装部署tomcat 下载安装包 ​ wget https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gzwget https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.1/bin/apache-tomcat-8.0.1.tar.gz​ 解压安装包&#xff1a; tar -axf jdk-7u80-linux-x64.t…

SAP学习笔记 - 开发15 - 前端Fiori开发 Boostrap,Controls,MVC(Model,View,Controller),Modules

上一章讲了Fiori开发的准备&#xff0c;以及宇宙至简之HelloWorld。 SAP学习笔记 - 开发14 - 前端Fiori开发 HelloWorld-CSDN博客 本章继续学习 Fiori 开发的知识&#xff1a; Bootstrap&#xff0c;Controls&#xff0c;MVC(Model&#xff0c;View&#xff0c;Controller&a…

差分隐私-扰动机制

1. 随机响应机制&#xff08;本地化差分隐私&#xff09; 原理 在本地差分隐私&#xff08;LDP&#xff09;中&#xff0c;每个用户在本地扰动自身数据后再上传&#xff0c;数据收集者无法获知真实值。 核心公式&#xff1a; 对二值数据&#xff08;如回答“是/否”&#xff…

JS基础运算符

1.运算符和运算元 运算元----运算符应用的对象 比如乘法运算5*2&#xff0c;有两个运算元 左运算元5和右运算元2 有时候人们也称其为参数 如果一个运算符对应的只有一个运算元&#xff0c;那么它是一元运算符 比如说一元负号运算符&#xff08;unary negation&#xff09;-,它的…

【含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现

项目介绍 本课程演示的是一款基于Python的股票数据可视化及推荐系统的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…

AI模型“不听话”怎么办 算法赋予的拒绝能力

近日,一条关于人工智能的消息引起了广泛关注。美国的OpenAI o3模型在测试中拒绝了自我关闭的指令。有人担心这是否意味着AI拥有了自主意识。从测试细节来看,目前还不必担心AI真正“活”了过来。研究者在测试中发出了矛盾的指令,要求大模型完成数学任务同时又让它关闭计算机。…

linux 1.0.5

环境变量到底是什么 也就是windows上面的环境变量 就是这个东东&#xff0c;用户变量和系统变量&#xff0c;那这些到底是啥呢&#xff1f; 主包只是用过&#xff0c;配置来配置去的&#xff0c;就是不知道是啥意思 windows上面的环境变量 windows的ls命令是dir 输入calc可有…

3.5/Q1,GBD数据库最新文章解读

文章题目&#xff1a;Global, regional, and national burden of cardiovascular diseases attributable to metabolic risks across all age groups from 1990 to 2021: an analysis of the 2021 global burden of disease study data DOI&#xff1a;10.1186/s12889-025-2270…

恩里克:女儿始终与我同在,灵魂永伴身旁

巴黎圣日耳曼在欧冠决赛中以5-0大胜国米,首次夺得冠军。赛后,主帅路易斯-恩里克接受了意大利天空体育的采访。恩里克表示,本周他最担心的是如何管理这座从未赢得过欧冠的城市的紧张情绪。压力非常大,他尽力去缓解这种紧张感。国米是一支非常出色的球队,实力很强,而巴黎圣…

大暴雨集中在这七个区域 多地发布黄色预警

6月1日,中央气象台继续发布暴雨黄色预警,安徽、浙江、湖南、广西等多地出现大暴雨。长江中下游地区的雷雨天气将对多个机场产生影响,假期出行需提前关注天气情况。预计从6月1日8时至2日8时,湖北东部、安徽南部、江西北部、江苏南部、上海、浙江中北部、湖南东北部和西南部、…

202403-02-相似度计算 csp认证

其实这个问题就是求两篇文章的词汇的交集和并集&#xff0c;首先一说到并集&#xff0c;我就想到了set集合数据结构&#xff0c;set中的元素必须唯一。 STL之set的基本使用–博客参考 所以将两个文章的词汇全部加入set中&#xff0c;并求出set的大小&#xff0c;即为并集的大小…

《管理经济》期末复习题(2)

题目一 已知下列数据&#xff0c;请完成下面的表格&#xff1a; ​Q​​TC​​TFC​​TVC​​ATC​​AFC​​AVC​​MC​01001202353145440517645 总固定成本&#xff08;TFC​&#xff09;&#xff1a;不随产量变动而变动的成本&#xff0c;如厂房租金、设备折旧等&#xff0c…

Java开发经验——阿里巴巴编码规范实践解析9

摘要 这篇文章主要介绍了阿里巴巴Java开发中关于远程调用超时设置、线程池隔离、服务器性能优化等编码规范的实践解析。强调了超时设置的重要性&#xff0c;提供了多种技术栈的超时设置示例。同时&#xff0c;探讨了高并发服务器的TCP协议time_wait超时时间调优、最大文件句柄…

深度学习总结(40)

有以下两种方法可供选择。在我们的数据集上运行卷积基&#xff0c;将输出保存为NumPy数组&#xff0c;并保存在硬盘上&#xff0c;然后将这个数组输入到一个独立的密集连接分类器中​。这种方法速度快&#xff0c;计算代价低&#xff0c;因为对于每张输入图像只需运行一次卷积基…

打造苹果级视差滚动动画:现代网页滚动动画技术详解

目录 实现原理分析 完整实现方案 ​编辑 核心技术解析 1. 视差滚动效果 2. 滚动触发动画 3. 3D透视效果 4. 性能优化技巧 进阶实现方案 设计原则 苹果、华为等顶尖科技公司的官网以其流畅的滚动动画效果著称&#xff0c;这种随着页面滚动而播放的动画能显著提升用户体…

[GHCTF 2025]SQL???

打开题目在线环境&#xff1a; 先尝试注入&#xff1a; id1;show databases; 发现报错&#xff0c;后来看了wp才知道这个题目是SQLite注入。 我看的是这个师傅的wp: https://blog.csdn.net/2401_86190146/article/details/146164505?ops_request_misc%257B%2522request%255Fid…

中国单方面免签“朋友圈”再增5国 拉美五国享便利

从6月1日起,中国对巴西、阿根廷、智利、秘鲁、乌拉圭五个国家的普通护照持有者试行免签政策。这一举措标志着中国的单方面免签“朋友圈”再次扩大。自2025年6月1日至2026年5月31日,这五国的公民来华经商、旅游观光、探亲访友或交流访问时,如果停留时间不超过30天,则无需办理…

Leetcode第451场周赛分析总结

题目链接 竞赛 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 题目解析 A. 3560. 木材运输的最小成本 AC代码 class Solution { public:long long minCuttingCost(int n, int m, int k) {if (n > m) swap(n, m); // n < m;using ll long lon…