目录

07.-快速上手HarmonyOS4.0-List_ListItem_ListItemGroup-组件详解一

07. 快速上手!HarmonyOS4.0 List_ListItem_ListItemGroup 组件详解(一)

文章目录

本章内容概要

https://i-blog.csdnimg.cn/blog_migrate/1f2bcf9b9acfe31873dadc7424e1a16a.png

List 容器组件

列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。

基本使用模型

space : 子组件主轴方向的间隔。

  List({space:10}){
		//  循环遍历
            ForEach(this.ListItemArr, (item, index)=>{
               ListItem(){
                   // 有且只有一个根组件
               }
            })
        }

创建需要循环的数据

有两种方式创建数据源

class 创建

如下图所示在ets 目录下创建一个model 文件夹 用于存放我们定义的类

https://i-blog.csdnimg.cn/blog_migrate/618442af2c1e9d6bc8537e30aae92d5f.png

**dataItem.ts内容如下 **


/**
 * @Author: 若城
 * @Date: 2024/1/23
 * @ProjectName:ArkTsNote
* @Name: dataItem
 * @Description:
 */
class DataItem{
	path:string
	label:string
	id:number
	constructor(path:string, label:string, id:number) {
		this.path = path
		this.label = label
		this.id = id
	}
}

export  default  DataItem
导入模块

在项目文件中导入router 模块 以及我们定义好的DataItem

import DataItem from '../model/dataItem'
import router from '@ohos.router';
创建数据方式一
private ListItemArr: Array<DataItem> = [
	new DataItem('pages/ListPages/ListBasics', 'List容器组件的基础使用', 1),
	new DataItem('pages/ListPages/ListCase', 'List向左滑出案例', 2),
	new DataItem('pages/ListPages/ListItemGroupNote', 'ListItemGroup基础', 3),
	]

通过 dataItem.ts 文件我们可以清晰的知道 new DataItem 第一个参数 是path地址, 第二个参数是内容,第三个参数是id标识

**接下来我们将对列表中标识的内容逐一讲解List 组件, 同时没有讲解到的地方的path 地址用 NAN 代替 **

创建数据方式二
private ListItemArr:object[] =[
	{
		"path":"pages/ListPages/ListBasics",
		"label":"List容器组件的基础使用",
		"id":1
	}
]

页面布局如下

https://i-blog.csdnimg.cn/blog_migrate/d34fea4324a065117f42cb02be5cc86f.png

代码如下

需要注意的是:

Text子组件 Span 是不支持 padding 和margin 属性的

/**
 * @Author: 若城
 * @Description:
 */
import DataItem from '../model/dataItem'
import router from '@ohos.router';
@Entry
	@Component
	struct List_ListItem_ListItemGroup_Note {
		private ListItemArr: Array<DataItem> = [
			new DataItem('pages/ListPages/ListBasics', 'List容器组件的基础使用', 1),
			new DataItem('pages/ListPages/ListCase', 'List向左滑出案例', 2),
			new DataItem('pages/ListPages/ListItemGroupNote', 'ListItemGroup基础', 3),
		]
		//  创建方式二
		//private ListItemArr:object[] =[
		//  {
		//    "path":"pages/ListPages/ListBasics",
		//    "label":"List容器组件的基础使用",
		//    "id":1
		//  }
		//]
		build() {
			Row() {
				Column() {
					Row() {
						Text('List容器组件的基础使用').fontSize(18).fontColor('#999')
					}.width('100%').justifyContent(FlexAlign.Start).padding(10)

					/**
         *  space : 子组件主轴方向的间隔。
         * layoutWeight:父容器尺寸确定时,设置了layoutWeight属性的子元素与兄弟元素占主轴尺寸按照权重进行分配,忽略元素本身尺寸设置,表示自适应占满剩余空间。
         * 注意 span 组件不支持padding / margin
         * 路由跳转
         * */
					List({ space: 10 }) {
						ForEach(this.ListItemArr, (item, index) => {
							ListItem() {
								Column(){
									Text() {
										Span(item.id.toString() + '.').fontSize(25)
										Span(item.label).fontSize(30)
									}.padding({ left: 10 }).height(100).width('100%')
										.onClick(()=>{
											router.pushUrl({
												url:item.path,
												params:{
													label: item.label
												}
											})
										})

									Divider().color('#999').strokeWidth(2).width('90%')
								}

							}
						})
					}.layoutWeight(1)

				}
				.width('100%')
					.height('100%')
			}
			.height('100%')
				.width('100%')
		}
	}

代码中我们主要通过foreach 的方法遍历了数据源, 并添加点击事件, 让其可以跳转到对应的路由

子路由创建

为了更加清晰的梳理目录结构, 我们在pages 目录下单独创建一个文件夹ListPages 用于存放与List组件相关的page 页面, 如下图所示

https://i-blog.csdnimg.cn/blog_migrate/80ce584e3c7de3205e0340ec8adc695c.png

相关文章阅读推荐