更新记录

2.1(2024-05-17) 下载此版本

新增

1.返回顶部单独做成组件

2.列表为空时插槽

修改兼容性问题,测试了网页/APP/微信小程序,理论上其他小程序都是兼容的(未测试)。

2.0(2024-05-17) 下载此版本

新增

  1. 列表每一项字段映射的demo. 2.列表是否需要返回顶部,字段:scrollTopShow 修改兼容性问题,测试了网页/APP/微信小程序,理论上其他小程序都是兼容的(未测试)。

1.0.0(2023-09-25) 下载此版本

创建

查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
app-vue
钉钉小程序 快手小程序 飞书小程序 京东小程序
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

列表加载

该组件自动处理了上拉加载,分页,loading,下拉刷新,数据加载完毕,返回顶部等功能,用了之后,发现真香,不用过多去做很多重复的工作,为了让任何列表组件通用,该组建没有样式,样式完全自定义,定义一次,相同的列表都能使用。

第一步,引用组件

import dyList from '@/components/dy-list/index'
// 必须给dyList的父组件指定宽高,dyList内容使用的宽高为100%
import item01 from '@/components/dy-list/item01'
// item01为自定义组件,需要多少列表样式就可以自定义多少,定义了之后类似的列表即可复用,不同列表的不同字段可以通过字段映射实现,详见示例代码

第二步,注册组件

components: {
    dyList, item01
}

Props

参数 类型 默认值 说明
pageOption Object {current: 1,size: 10,total: 0} 分页数据
list Array [] 列表数据
options Object 见下方 字段配置项

Options

字段 默认值 说明
loadingText '加载中' 数据加载文字
finishTest '没有更多数据了' 加载完毕文字
current 'current' 分页页码字段名
total 'total' 数据总条数字段名
scrollTopShow true 是否需要返回顶部
nullBoxText '暂无数据' 数据列表为空文字

Events

事件名称 说明 回调参数
getList 获取数据事件 getList(e,successFn,failFn),e:{scrollTop:滚动距离,direction:bottom/top(上拉加载/下拉刷新)},successFn:请求成功回调,成功回调时,需要把分页总条数传入,failFn:请求失败回调

Slot

字段 说明
dyListItem 列表内容插槽
nullBox 列表内容为空插槽,使用插槽后,参数 nullBoxText 失效

示例代码


<template>
    <view class="content">
        <dyList class="dyList" ref="dyList" :options.sync="options" :list.sync="list" :pageOption.sync="pageOption"
            @getList="getList">
            <template slot="dyListItem">
                <view class="dyListItem" v-for="(row,index) in list" :key="index">
                    <item01 :fieldMap="fieldMap" :row="row" :index="index" @del="del"></item01>
                </view>
            </template>
            <view class="nullBox" slot="nullBox">没有数据</view>
        </dyList>
    </view>
</template>

<script>
    import dyList from '@/uni_modules/dy-list/components/dy-list/index.vue'
    import item01 from '@/uni_modules/dy-list/components/dy-list/item01.vue'
    // item01不属于默认组件,可以替换为任何内容,所以,字段映射,属性这些不作为文档内容。

    export default {
        components: {
            dyList,
            item01
        },
        data() {
            return {
                options: {
                    nullBoxText: '数据不知道去哪里了',
                    loadingText: '拼命加载中',
                    finishText: '没有更多数据了',
                    scrollTopShow: false,
                    current: 'current',
                    total: 'total',
                },
                pageOption: { // 分页数据
                    current: 1,
                    size: 10,
                    total: 0,
                },
                list: [],
                // 字段映射,同一个位置,不同字段,都可以用字段映射出去
                fieldMap: {
                    field1: 'index',
                    field2: 'name',
                }
            }
        },
        onLoad() {
            let _self = this;
        },
        methods: {
            getList(e, success, fail) {
                let _self = this;
                // 模拟数据请求
                let timer = setTimeout(() => {
                    let code = 200;
                    if (code === 200) {
                        // 添加数据时,只需要push,不能push的情况已经判断了。
                        for (let i = 0; i < _self.pageOption.size; i++) {
                            _self.list.push({
                                id: Math.random(),
                                name: 'item',
                                index: i,
                            });
                        }
                        _self.pageOption.total = 60;
                        success && success(_self.pageOption.total);
                    } else {
                        fail && fail();
                    }
                }, 700)
            },
            del(row, index) {
                this.list.splice(index, 1);
                console.log(this.list);
            },
        }
    }
</script>

<style lang="scss" scoped>
    .content {
        display: flex;
        width: 750rpx;
        height: 960rpx;

        .dyList {
            width: 100%;

            .nullBox {
                line-height: 100rpx;
                text-align: center;
                color: #a8a8a8;
            }
        }
    }
</style>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问