首页
学习
活动
专区
圈层
工具
发布

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

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

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

分类列表

先来看左侧的分类列表,很明显是一个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语言##仓颉##购物#

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OhJro0hfWX4nYGGev97MfgKw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券