
回复
项目源码已发布到GitCode平台, 方便开发者进行下载和使用。
harmonyOSAvatar
主页面效果如下:
侧边栏效果如下
本教程详细介绍HarmonyOS应用中侧边栏容器组件(SlideBarList)的实现。侧边栏容器组件负责管理和渲染整个侧边栏的内容,包括数据处理和列表展示,是构建应用侧边栏的核心组件。
SlideBarList
组件是一个列表容器,主要包含以下部分:
SlideBarList
组件使用以下数据模型:
// 节日分类数据模型
export class FestivalClass {
id: string; // 分类ID
cid: string; // 父分类ID
name: string; // 分类名称
}
// 节日背景数据模型
export class FestivalBgClass {
id: string; // 背景ID
img: string; // 背景图片
name: string; // 背景名称
title: string; // 背景标题
titleImg: string; // 标题图片
hasSele: boolean; // 是否被选中
}
// 组合数据接口
export interface dataSourceInterface {
id: string; // 数据ID
img: string; // 图片路径
name: string; // 名称
title: string; // 标题
titleImg: string; // 标题图片
hasSele: boolean; // 是否被选中
children: ChildItem[]; // 子项列表
}
@Component
export struct SlideBarList{
@State dataSource: dataSourceInterface[] = [] // 处理过后的数据源
@State festivalData: FestivalClass[] = festivalList // 节日分类数据源
@State FestivalBgData: FestivalBgClass[] = FestivalBgList // 节日背景数据源
}
SlideBarList
组件在初始化时,通过dataTreating()
方法处理数据,将一级列表和二级列表的数据关联起来:
dataTreating() {
let nowData: dataSourceInterface[] = []
// 遍历一级列表数据
this.FestivalBgData.forEach(item => {
nowData = [{
id: item.id,
img: item.img,
name: item.name,
title: item.title,
titleImg: item.titleImg,
hasSele:item.hasSele,
children:[]
}]
// 遍历二级列表数据
this.festivalData.forEach(itemB => {
if (item.id == itemB.cid) {
nowData[0].children.push(
{
id: itemB.id,
cid: itemB.cid,
name: itemB.name
}
)
}
});
// 将数据添加到 dataSource 中
this.dataSource.push(...nowData)
});
}
数据处理的核心逻辑是:
FestivalBgData
(一级列表数据)children
数组festivalData
(二级列表数据),查找cid
与一级列表项id
匹配的项children
数组中dataSource
中组件在aboutToAppear
生命周期中调用数据处理方法:
aboutToAppear(): void {
this.dataTreating()
}
组件使用ArkUI的List
和ForEach
组件渲染侧边栏列表:
build() {
Column(){
List(){
ForEach(this.dataSource,(item: dataSourceInterface , index )=>{
ListItem(){
SlideBarItem({
SildeItem:item
})
}
})
}
.width('90%')
.height('90%')
.alignListItem(ListItemAlign.Center)
.borderRadius(20)
.divider({strokeWidth:'1px', color:'#eaf0ef'})
.scrollBar(BarState.Off)
}.width('100%')
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)
.height('100%')
}
组件使用了以下样式和布局设计:
Column
组件,设置宽高为100%,内容居中对齐List
组件,设置宽高为90%,添加圆角和分割线ListItem
组件,内部包含SlideBarItem
组件scrollBar(BarState.Off)
隐藏滚动条SlideBarList
组件实现了复杂的数据关联逻辑:
FestivalBgClass
中的id
与FestivalClass
中的cid
建立关联FestivalClass
中的id
可以用于查找PhotoClass
中的cid
,作为头像装饰的选择(这部分逻辑可能在其他组件中实现)这种多级数据关联设计使得应用能够灵活地组织和展示不同类别的内容。
在页面中使用SlideBarList
组件:
SlideBarList()
由于SlideBarList
组件内部已经包含了数据处理和渲染逻辑,使用时不需要传入额外的参数。
@State
装饰器管理组件内部状态SlideBarList
组件是构建HarmonyOS应用侧边栏的核心容器组件,通过合理的数据处理和列表渲染,实现了功能完善的侧边栏。开发者可以基于此组件快速构建具有多级菜单结构的应用侧边栏。