赵淳美 发表于 2025-6-3 00:38:26

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

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

分类页面要在基本布局的基础上增加一些动态效果,比如点击状态的切换和两个列表容器的联动。下面为大家详细介绍。
分类列表
先来看左侧的分类列表,很明显是一个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 => data
                  case _ => 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 = false
      httpRequest.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语言##仓颉##购物#

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

孓访懔 发表于 2025-12-22 19:02:18

热心回复!

辜酗徇 发表于 2026-1-1 23:26:16

不错,里面软件多更新就更好了

眸胝 发表于 2026-1-6 03:54:29

前排留名,哈哈哈

列蜜瘘 发表于 2026-1-18 00:54:51

鼓励转贴优秀软件安全工具和文档!

讲怔 发表于 2026-1-18 23:52:30

感谢,下载保存了

幽淆 发表于 2026-1-19 03:51:23

收藏一下   不知道什么时候能用到

丧血槌 发表于 2026-1-19 22:27:06

前排留名,哈哈哈

劳暄美 发表于 2026-1-21 05:46:21

过来提前占个楼

撙仿 发表于 2026-1-21 10:24:40

懂技术并乐意极积无私分享的人越来越少。珍惜

艾晓梅 发表于 2026-1-21 11:08:06

谢谢分享,辛苦了

万俟谷雪 发表于 2026-1-22 04:44:52

yyds。多谢分享

咚獭 发表于 2026-1-23 01:50:34

感谢,下载保存了

岳娅纯 发表于 2026-1-29 02:02:34

东西不错很实用谢谢分享

劳暄美 发表于 2026-2-1 07:31:22

分享、互助 让互联网精神温暖你我

尹疋 发表于 2026-2-2 14:53:25

谢谢分享,辛苦了

汪玉珂 发表于 2026-2-3 04:05:32

用心讨论,共获提升!

揭荸 发表于 2026-2-5 09:11:06

用心讨论,共获提升!

官厌 发表于 2026-2-8 00:14:52

感谢分享,下载保存了,貌似很强大

奄幂牛 发表于 2026-2-8 08:12:21

东西不错很实用谢谢分享
页: [1] 2
查看完整版本: 鸿蒙仓颉语言开发实战教程:实现商品分类页