Skip to content

滚动列表组件 (c-scroll-list)

滚动列表组件封装了上拉加载、下拉刷新功能,适用于需要分页加载数据的列表场景,大幅简化了分页逻辑的处理。

基本用法

vue
<template>
    <view class="container">
        <c-scroll-list :api="api" :apiParams="apiParams" @load="load">
            <view v-for="(item, index) in list" :key="index" class="list-item">
                <text>{{ item.name }}</text>
                <text>{{ item.price }}</text>
            </view>
            <!-- 自定义空数据状态 -->
            <template #empty>
                <view class="empty">
                    <image src="/static/empty.png"></image>
                    <text>暂无数据</text>
                </view>
            </template>
        </c-scroll-list>
    </view>
</template>

<script>
export default {
    data() {
        return {
            api: this.$api.geiList(),
            apiParams: {
                pageNum: 1,
                pageSize: 10,
            },
            list: [],
            params: {
                pageNum: 1,
                pageSize: 10,
                keyword: "",
                category: "",
            },
        };
    },
    methods: {
        // 获取列表数据的方法
        getProductList() {},

        // 数据加载成功的回调
        load(data) {
            console.log("列表数据加载成功", data);
            this.list = data.list;
        },
    },
};
</script>

手动刷新

有时候我们需要在某些操作后手动刷新列表,可以通过 ref 来调用组件的内部方法。

vue
<template>
    <view class="container">
        <view class="filter">
            <input v-model="params.keyword" placeholder="搜索关键词" />
            <button @click="onSearch">搜索</button>
        </view>

        <c-scroll-list ref="scrollList" :apiParams="apiParams" @load="load">
            <!-- 列表内容... -->
        </c-scroll-list>
    </view>
</template>

<script>
export default {
    data() {
        return {
            api: this.$api.xxxx,
            apiParams: {
                pageNum: 1,
                pageSize: 10,
                keyword: "",
                category: "",
            },
        };
    },
    methods: {
        load(data) {
            // 获取列表数据...
            console.log("列表数据", data);
        },

        // 搜索按钮点击事件
        onSearch() {
            // 手动触发刷新
            this.$refs.scrollList.refresh();
        },
    },
};
</script>

属性说明

属性名类型默认值说明
apiFunction-请求列表数据的API方法,必须返回Promise
apiParamsObject{}请求参数,会作为参数传递给api方法
optionObject{}组件配置项,详见下方option配置

option配置项

属性名类型默认值说明
pageNumber1初始页码
sizeNumber10每页数据量
autoBooleantrue是否自动加载
fieldString''数据字段名,如果接口返回的列表不在顶层,可通过此参数指定
heightNumbernull组件高度,单位upx,不设置则自动计算
disabledBooleanfalse是否禁用上拉加载和下拉刷新
backgroundString''背景颜色
emptyImageString''自定义空数据图片,不设置则使用内置图片
offsetBottomNumber0底部高度补偿,单位upx
pullDownSpeedNumber0.5下拉速率
lowerThresholdNumber40距离底部多远时触发上拉加载,单位px
refresherThresholdNumber60下拉多少距离触发下拉刷新,单位px
refreshDelayedNumber800刷新延迟时间,单位ms
refreshFinishDelayedNumber200刷新完成后的延迟时间,单位ms
safeAreaBooleanfalse是否开启安全区域适配
emptyTextColorString"#82848a"空提示文字颜色
loadTextColorString"#82848a"上拉加载文字颜色
loadIconColorString"#82848a"上拉加载图标颜色
refresherTextColorString"#82848a"下拉刷新文字颜色
refresherIconColorString"#82848a"下拉刷新图标颜色
emptyTextString"暂无列表~"空数据提示文字
loadingTextString"正在加载中~"加载中文字
loadFailTextString"加载失败~"加载失败文字
noMoreTextString"没有更多~"没有更多文字
refreshingTextString"正在刷新~"正在刷新文字
refreshFailTextString"刷新失败~"刷新失败文字
refreshSuccessTextString"刷新成功~"刷新成功文字
pulldownTextString"下拉刷新~"下拉中的文字
pulldownFinishTextString"松开刷新~"下拉完成的文字

事件说明

事件名说明回调参数
init组件初始化完成时触发rect: Object (组件尺寸信息)
load数据加载完成时触发{ list, count, otherData }
loadSuccess数据加载成功时触发list: Array (列表数据)
loadFail数据加载失败时触发-
refreshSuccess刷新成功时触发list: Array (列表数据)
refreshError刷新失败时触发-
refreshStop下拉刷新中断时触发-
scroll滚动时触发e: Object (滚动事件对象)
scrolltolower滚动到底部时触发e: Object (滚动事件对象)
touchStart触摸开始时触发e: Object (触摸事件对象)
touchMove触摸移动时触发e: Object (触摸事件对象)
touchEnd触摸结束时触发e: Object (触摸事件对象)

方法

方法名说明参数
load加载数据state (Boolean): 是否重置数据,默认true
refresh刷新数据,会重置到第一页-
initList初始化列表state (Boolean): 是否仅刷新数据状态
resetOrder (Boolean): 是否清空数据
type (String): 加载类型,可选值为"load"或"refresh"

插槽

插槽名说明作用域参数
default一般为列表内容-
empty自定义空数据状态-
pulldown自定义下拉刷新状态-
pullup自定义上拉加载状态-

注意事项

  1. api 方法必须返回 Promise,且 resolve 的数据格式需包含 listtotal 字段
  2. 如果接口返回的数据结构不是 {list, total},可以通过 option.field 指定数据字段
  3. 组件内部会自动处理分页逻辑,无需在外部进行数据拼接
  4. 修改 apiParams 参数后,需要手动调用 refresh() 方法刷新列表
  5. 组件默认高度会自动计算,如需固定高度可通过 option.height 属性设置

本内容仅限内部使用,包含机密和专有信息。严禁任何形式的复制、分发或泄露给任何第三方