前言

普遍存在于各种app中的上拉加载下拉刷新功能大家都不陌生吧,一般来说,在数据量比较大的情况下,为了更快的渲染和给用户更好的观感体验,我们会将数据做分页处理,让其批量加载,这样一来,在渲染速度上,能给用户一个比较好的体验效果。话说回来,分页处理,也就是我们今天要讲的上拉加载和下拉刷新。

实现思路

下拉刷新:

请求接口赋完值后,将接口返回数据长度与总条数进行比较控制加载不加载的状态,在下拉刷新方法中定义起始页码为第一页,调整加载的状态为false,最后调用请求数据的接口方法,做适当轻提示即可。

上拉加载:

首先在data中定义一个新的数组用于将新加载的数据与老的数据合并,在上拉加载方法中让加载的页码递增,然后请求接口进行赋值,将接口返回数据循环并将数据添加到list数组中,将返回数据长度与总条数进行比较控制加载不加载的状态实现上拉加载。

话不多说,下面进入实例开发。以下是我为了方便大家理解做的一个小demo,大家可以根据相关代码及注释快速上手操作。

<template>
    <div>
        <!-- van-pull-refresh:下拉刷新 -->
        <van-pull-refresh v-model="isloading" @refresh="onrefresh">
            <!-- 上拉加载 -->
            <van-list v-model="loading" :finished="finished" :immediate-check="false" finished-text="没有更多了"
                @load="onload" :offset="20">
                <div class="outerbox" v-for="(item,index) in list" :key="index">
                    <div>公司名称:{{item.gsmc}}</div>
                    <div>行业类别:{{item.hylb}}</div>
                    <div>进车限值:{{item.jcxz}}</div>
                </div>
            </van-list>
        </van-pull-refresh>
    </div>
</template>
<script>
    import {getpassanalysislist} from '@/api/enforcement' //引入接口文件
    export default {
        data() {
            return {
                //传递给后端的参数
                incomepaydata: {
                    pagenumber: 1, //请求第几页
                    pagesize: 10, //每页请求的数量
                },
                list: [], //列表数据
                listtwo: [], //用于上拉加载时将数据合并
                total: 0, //总页数
                isloading: false, //下拉刷新
                loading: false, //上拉加载
                finished: false, //加载与不加载的状态
            }
        },
        mounted() {
            this.getpassanalysislist(); //列表数据接口
        },
        methods: {
            //列表数据接口
            getpassanalysislist() {
                getpassanalysislist(this.incomepaydata).then(res => {
                    if (res.code == '10000') {
                        this.list = res.data.records; //将接口返回赋值data定义的数组
                        this.total = res.data.total; //将接口返回的总数据条数赋值data中定义的total
                        if (this.list.length >= this.total) { //将返回数据长度与总条数进行比较控制加载不加载的状态
                            this.finished = true;
                        }
                    }
                })
            },
            //下拉刷新
            onrefresh() {
                this.incomepaydata.pagenumber = 1; //起始为第一页
                this.finished = false; //加载与不加载的状态
                settimeout(() => {
                    this.isloading = false; //下拉刷新状态
                    this.getpassanalysislist() //刷新成功调用列表方法
                    this.$toast('刷新成功'); //轻提示信息
                }, 700);
            },
            //上拉加载
            onload() {
                this.incomepaydata.pagenumber++; //加载时页码递增
                getpassanalysislist(this.incomepaydata).then(res => {
                    if (res.code == '10000') {
                        this.listtwo = res.data.records; //将接口返回赋值data定义的数组
                        this.total = res.data.total; //将接口返回的总数据条数赋值data中定义的total
                        this.listtwo.foreach(item => { //循环返回的数据并将数据添加到list中
                            this.list.push(item)
                        })
                        // 加载状态结束 状态更新为false
                        this.loading = false;
                        if (this.list.length >= this.total) { //将返回数据长度与总条数进行比较控制加载不加载的状态
                            this.finished = true;
                        }
                    }
                })
            },
        }
    }
</script>
<style scoped>
    /* 外层盒子的样式 */
    .outerbox {
        padding: 10px;
        box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.3),
            0px 0px 20px rgba(0, 0, 0, 0.1) inset;
        margin: 0px 16px 16px 16px;
        overflow: hidden;
    }
</style>

至此,这个小功能就实现啦,下图是实现的效果展示,感兴趣的话可以自己私下试试哟。

到此这篇关于vue基于vant实现上拉加载下拉刷新的文章就介绍到这了,更多相关vue vant上拉加载下拉刷新内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!