list-view.md 5.2 KB
Newer Older
D
DCloud_LXH 已提交
1
## list-view
D
DCloud_LXH 已提交
2 3 4

<!-- UTSCOMJSON.list-view.description -->

W
更x  
wanganxp 已提交
5 6
在App中,基于recycle-view的list,才能实现长列表的资源自动回收,以保障列表加载很多项目时,屏幕外的资源被有效回收。list-view就是基于recycle-view的list组件。

W
wanganxp 已提交
7
每个list由1个父组件list-view及若干子组件list-item构成。仅有有限子组件可识别,[见下](#children-tags)
W
更x  
wanganxp 已提交
8 9 10

list-view和scroll-view都是滚动组件,list适用于长列表场景,其他场景适用于scroll-view。

W
wanganxp 已提交
11
list-view支持通过子组件sticky-header处理吸顶的场景。
shutao-dc's avatar
shutao-dc 已提交
12

D
DCloud_LXH 已提交
13 14
<!-- UTSCOMJSON.list-view.attrubute -->

D
DCloud_LXH 已提交
15 16
<!-- UTSCOMJSON.list-view.event -->

17 18
<!-- UTSCOMJSON.list-view.example -->

shutao-dc's avatar
shutao-dc 已提交
19
### 自定义下拉刷新样式
20 21

list-view组件有默认的下拉刷新样式,如果想自定义,则需使用自定义下拉刷新。
shutao-dc's avatar
shutao-dc 已提交
22 23

1. 设置`refresher-default-style`属性为 none 不使用默认样式
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
2. 设置 list-item 定义自定义下拉刷新元素并声明为 `slot="refresher"`,需要设置刷新元素宽高信息否则可能无法正常显示!
   ```html
   <template>
   	<list-view refresher-default-style="none" :refresher-enabled="true" :refresher-triggered="refresherTriggered"
   			 @refresherpulling="onRefresherpulling" @refresherrefresh="onRefresherrefresh"
   			 @refresherrestore="onRefresherrestore" style="flex:1" >

   		<list-item v-for="i in 10" class="content-item">
   			<text class="text">item-{{i}}</text>
   		</list-item>

   		<!-- 自定义下拉刷新元素 -->
   		<list-item slot="refresher" class="refresh-box">
   			<text class="tip-text">{{text[state]}}</text>
   		</list-item>
   	</list-view>
   </template>
shutao-dc's avatar
shutao-dc 已提交
41 42 43
   ```
3. 通过组件提供的refresherpulling、refresherrefresh、refresherrestore、refresherabort下拉刷新事件调整自定义下拉刷新元素!实现预期效果

44 45
**注意:**
+ 3.93版本开始支持
shutao-dc's avatar
shutao-dc 已提交
46
+ 目前自定义下拉刷新元素不支持放在list-view的首个子元素位置上。可能无法正常显示
shutao-dc's avatar
shutao-dc 已提交
47

D
DCloud_LXH 已提交
48

D
DCloud_LXH 已提交
49 50
<!-- UTSCOMJSON.list-view.compatibility -->

D
DCloud_LXH 已提交
51 52
<!-- UTSCOMJSON.list-view.children -->

D
DCloud_LXH 已提交
53 54
<!-- UTSCOMJSON.list-view.reference -->

D
DCloud_LXH 已提交
55
## list-item
D
DCloud_LXH 已提交
56 57 58

<!-- UTSCOMJSON.list-item.description -->

D
DCloud_LXH 已提交
59 60 61 62 63 64 65
<!-- UTSCOMJSON.list-item.attrubute -->

### list-item复用机制

+ type属性定义list-item组件类型。不赋值type属性默认值为0,每一个type类型都会有对应的list-item组件缓存池。
+ list-view组件加载list-item组件时,会优先查询对应type缓存池是否存在可复用的list-item组件。有则复用没有则创建新的list-item组件。
+ list-item组件被滑动出屏幕则会优先添加到对应类型的list-item缓存池,每个类型缓存最大5个(不同平台缓存最大值不固定),如果缓存池已满则进行组件销毁!
shutao-dc's avatar
shutao-dc 已提交
66
+ 部分list-item组件存在子元素个数差异或排版差异时。请尽可能的配置不同的type,这样可以规避获取相同type类型的list-item组件后。由于子元素差异导致list-item无法正常复用问题。具体可参考示例:
D
DCloud_LXH 已提交
67 68

	```html
shutao-dc's avatar
shutao-dc 已提交
69 70
	<template>
	  <view class="content">
D
DCloud_LXH 已提交
71 72 73 74 75 76 77
		<list-view ref="listView" class="list" :scroll-y="true">
		  <list-item v-for="(item,index) in list" :key="index" class="content-item1" type=1>
			<text class="text">title-{{item}}</text>
			<text class="text">content-{{item}}</text>
		  </list-item>
		  <list-item v-for="(item,index) in list" :key="index" class="content-item2" type=2>
		  	<image class="image" src ="/static/test-image/logo.png"></image>
shutao-dc's avatar
shutao-dc 已提交
78 79 80 81 82 83
		  </list-item>
		  <list-item type=3>
			<text class="loading">{{text}}</text>
		  </list-item>
		</list-view>
	  </view>
D
DCloud_LXH 已提交
84 85 86
	</template>
	```
	示例中有三种类型的list-item组件。如果都不赋值type,list-item组件滑动出屏幕后都归类到type=0的缓存池。当触发list-item组件重新加载时,获取type=0的缓存池的组件,获取到的list-item组件可能是两个text子组件也可能是一个image子组件或一个text子组件,底层复用判断时则认为该情况异常不复用,重新创建新的list-item组件!复用失败未能优化性能。正确的方式则是不同的类型设置不同的type。加载时则会获取对应type类型缓存池中的list-item组件实现复用。
shutao-dc's avatar
shutao-dc 已提交
87 88 89 90

**注意:**

1. 避免对list-item组件的子元素设置event事件,复用后list-item组件部分子元素可能无法正常响应event,有相关业务需要对子元素设置event事件,可对list-item组件设置独立的type实现不复用。
D
DCloud_LXH 已提交
91

D
DCloud_LXH 已提交
92 93
<!-- UTSCOMJSON.list-item.event -->

D
DCloud_LXH 已提交
94 95
<!-- UTSCOMJSON.list-item.example -->

D
DCloud_LXH 已提交
96 97
<!-- UTSCOMJSON.list-item.compatibility -->

D
DCloud_LXH 已提交
98 99
<!-- UTSCOMJSON.list-item.children -->

D
DCloud_LXH 已提交
100 101
<!-- UTSCOMJSON.list-item.reference -->

W
更x  
wanganxp 已提交
102 103
## 示例代码

W
x  
wanganxp 已提交
104
- 联网联表:[https://gitcode.net/dcloud/hello-uni-app-x/-/blob/master/pages/template/list-news/list-news.uvue](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/master/pages/template/list-news/list-news.uvue)
W
更x  
wanganxp 已提交
105
- 可左右滑动的多个列表:[https://gitcode.net/dcloud/hello-uni-app-x/-/tree/master/pages/template/long-list](https://gitcode.net/dcloud/hello-uni-app-x/-/tree/master/pages/template/long-list)
106

W
更x  
wanganxp 已提交
107

W
wanganxp 已提交
108
### Bug & Tips@tips
W
更x  
wanganxp 已提交
109

W
x  
wanganxp 已提交
110
- 暂不支持reverse,目前还不能开发im那样的倒序列表
111 112
- 多列瀑布流是另外的组件,后续会提供
- list-view组件的overflow属性不支持配置visible