List 列表
列表组件集成了下拉刷新、上拉加载、空数据,在APP端使用原生的list
组件具有内存回收机制,建议所有页面不管是否使用列表,都使用该组件进行包装。
注意
该组件的子组件只能是c-list-item
、c-list-header
组件。
平台
App | 小程序 | H5 |
---|---|---|
√ | √ | √ |
属性
属性名 | 类型 | 默认值 | 说明 | 平台 |
---|---|---|---|---|
down | Object | 详细配置见下 | 下拉刷新配置 | All |
up | Object | 详细配置见下 | 上拉加载更多配置 | All |
emptyProps | Object | {} | 空状态配置 | All |
emptyPosition | String | bottom | 空状态位置 top:顶部 bottom:底部 none:不显示 | All |
firstLoadPosition | String | top | 首次加载的loading位置 top:顶部 bottom:底部 none:不显示 | All |
cClass | String,Array,Object | null | 组件类 | All |
cStyle | String,Array,Object | null | 组件样式 | All |
margin | String,Number,Array | null | 外边距 | All |
padding | String,Number,Array | null | 内边距 | All |
bgColor | String | null | 背景色,支持c-bg- 开头的背景色类 | All |
down
下拉刷新详细:
{
use: false,
offset: '45px',// 下拉触发距离
refreshBgColor: null, // 下拉刷新时的背景色
// 下拉状态为outOffset时的颜色
outOffsetTextColor:null,
outOffsetIndicatorColor:null,
beforeEndDelay: 800, // 调用endSuccess或endError后延迟多久关闭刷新框
// 下拉时指示器的样式
// true和loadMore.loadingIndicatorProps一致,false不显示
indicatorProps:true,
// 参考c-load-more组件的props
loadMore:{
indicatorPosition:'left',
indicatorGutter:'10rpx',
loadMoreText: '下拉刷新',
noMoreText: "释放更新",
loadingText: "正在刷新",
successText: {
text:"刷新成功",
color:'c-t-success'
},
errorText: {
text:"刷新失败",
color:'c-t-danger'
},
successIcon:'success',
errorIcon:'error',
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
up
上拉加载更多详细:
{
use: false,
auto: true, // 自动加载第一项
offset: '100px', // 距离底部触发距离
pageSize: 10,
noMoreSize: 5, // 避免列表数据过少(比如只有一条数据),显示无更多数据会不好看。其值必须<=upOption.pageSize的值
// 参考c-load-more组件的props
loadMore:{
height:'80rpx',
indicatorPosition:'left',
indicatorGutter:'10rpx',
loadMoreText: '上拉加载更多',
loadingText: '正在加载...',
noMoreText: '-- 没有更多了 --',
errorIcon:'refresh',
errorText: {
text:"加载失败,点击重试",
color:'c-t-danger'
},
errorBgColor:'c-bg-danger-light-8',
},
pageType:'pageSize', //判断是否有分页的类型:pageSize总页数,dataSize 总数据,hasPage 是否有下一页
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
事件
事件名 | 说明 |
---|---|
onReady | 列表准备完成时 |
pullingUp | 上拉加载更多触发page 当前分页数 |
pullingDownStart | 开始下拉刷新 |
pullingDown | 下拉刷新触发 |
scroll | 滚动时触发 {scrollTop} |
插槽
插槽名 | 说明 |
---|---|
lowest | 在列表容器顶部 |
firstLoading | 首次loading插槽,可配合骨架屏组件使用,需要c-list-item 组件 |
before | 顶部插槽,需要c-list-item 组件 |
default | 内容插槽 |
after | 底部插槽,需要c-list-item 组件 |
empty | 空数据插槽,props 值type=error|empty |
方法
名称 | 说明 |
---|---|
endSuccess(currentDataSize = 1, pageTypeValue) | 加载状态设为成功currentDataSize 当前页服务端返回的数据数currentDataSize 属性需要根据upOption.pageType 值判断传递 |
endError(error = null) | 加载状态设为失败error 错误信息,可以是字符串,对象或错误对象 |
resetUpScroll(showLoading = true,callback) | 重置页面为初始状态showLoading 是否显示loadingcallback 操作成功的回调 |
scrollTo(uniqueClassName,options = {}) | 滚动到指定位置c-list-item 组件的uniqueClassName 唯一类名,等于“backTop”时返回到顶部options 的参数{offset:'偏移',animated:'是否动画'} |
downLock | 禁用下拉刷新 |
示例
vue
<template>
<c-page>
<c-list ref="list" :down="{use:true}" @pullingDown="loadData(1)" :up="listUpOption" @pullingUp="loadData">
<c-list-item>
</c-list-item>
</c-list>
</c-page>
</template>
<script setup>
import {ref} from 'vue'
const list = ref(null);
const listUpOption = {
use: true,
auto:true,
pageSize: 10,
noMoreSize: 5,
}
const dataList = ref([]);
function loadData(page){
uni.$c.api.testApi({
pageIndex:page,
pageSize:listUpOption.pageSize
}).then(res=>{
if(page === 1){
dataList.value = res.list;
}else{
dataList.value = [...dataList.value,...res.list];
}
list.value.endSuccess(res.list.length,res.totalPageSize)
}).catch(err=>{
list.value.endError(err);
})
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36