Skip to content

列表 List

列表组件。集成加载状态和空状态的列表组件。

重要提示

重要提示

需在 App.vue 中引入 pure-styles 样式,@import '@/uni_modules/pure-styles/index.css';

兼容性

  • 兼容:✅
  • 不兼容:❌
  • 未知:❔
H5安卓苹果微信支付宝百度抖音QQ快手飞书京东
小红书鸿蒙360华为快应用快应用联盟

插件市场地址

DCloud 插件市场地址

使用方式

  • 通过 v-model 绑定列表数据。
  • 通过 loadPromise 绑定查询列表的函数,该函数需返回一个 Promise

内部判断是否加载全部数据的逻辑

  • 默认情况下,组件内容通过 pageSize 和接口返回新数据的长度判断是否加载了全部数据。
    • 如果新数据长度小于 pageSize,则认为已加载全部数据。
    • 否则,认为未加载全部数据。
    • 需通过 pageSize 属性传入每页的数据长度。
  • 通过列表全部数据的总长度和当前列表数据的长度判断是否加载了全部数据。
    • 如果当前列表数据长度大于等于总长度,则认为已加载全部数据。
    • 否则,认为未加载全部数据。
    • 需要通过 listTotalKeyName 属性设置接口返回数据中表示数据总长度的属性名,支持深层写法,如 data.total
  • 通过接口返回的总页数和当前页码判断是否加载了全部数据。
    • 如果当前页码 +1 大于等于总页数,则认为已加载全部数据。
    • 否则,认为未加载全部数据。
    • 需要通过 pageTotalKeyName 属性设置接口返回数据中表示数据总页数的属性名,支持深层写法,如 data.totalPage

空状态的显示逻辑

  • 至少请求过一次数据。
  • 当前页码等于defaultIndex
  • 数据为空或请求失败。
  • showEmpty 属性为 true

满足以上所有条件后才会显示空状态。

vue
<template>
    <pure-list v-model="list" :pageSize="pageSize" :loadPromise="queryList" ref="listRef">
        <view class="item" v-for="(item, index) in list" :key="index">{{ index + 1 }}</view>
    </pure-list>
</template>

<script setup>
    import { ref } from "vue";
    import { onReady, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";

    // 组件的引用
    const listRef = ref(null);

    // 列表数据
    const list = ref([]);

    // 每页数据长度
    const pageSize = 15;

    // 页面渲染完成后
    onReady(() => {
        // 加载第一页数据
        listRef.value.load();
    });

    // 上拉加载
    onReachBottom(() => {
        listRef.value.load();
    });

    // 下拉刷新
    onPullDownRefresh(() => {
        listRef.value.refresh();
    });

    // 查询数据
    function queryList() {
        // 模拟查询数据
        // 需返回 Promise
        return new Promise((resolve) => {
            const newList = [];

            // 默认返回的数据长度小于pageSize,则被认为没有更多数据了
            // 这里模拟实现一下
            const size = list.value.length >= pageSize * 3 ? pageSize - 5 : pageSize;

            for (let i = 0; i < size; i++) {
                newList.push({
                    id: Math.random(),
                });
            }

            // 模拟接口返回的数据
            const result = {
                code: 0,
                errMsg: "请求成功",
                data: {
                    list: newList,
                },
            };

            setTimeout(() => {
                resolve(result);
            }, 1000);
        });
    }
</script>

Props

属性名说明类型默认值可选值版本
v-model列表数据Array[]-+1.0.0
loadPromise加载数据的函数Functionundefined-+1.0.0
pageSize每页数据长度Number10-+1.0.0
defaultIndex默认页码,即从哪一页开始加载数据Number1-+1.0.0
showEmpty是否显示空状态Booleantruefalse+1.0.0
showLoadmore是否显示加载状态Booleantruefalse+1.0.0
emptyOpts空状态组件配置项,参考Object{}-+1.0.0
loadmoreOpts加载状态组件配置项,参考Object{}-+1.0.0
listDataKeyName接口返回数据中表示列表数据的键名Stringdata.list-+1.0.0
listTotalKeyName接口返回数据中表示列表总长度数据的键名String""-+1.0.0
pageTotalKeyName接口返回数据中表示列表总页数数据的键名,优先级高于 listTotalKeyNameString``-+1.0.0

Event

事件名说明回调参数版本
complete加载数据函数请求完成后的事件-+1.0.0

Slots

名称说明参数版本
default默认,列表项-+1.0.0

基于 MIT 许可发布