最详细的vue+vant的上拉加载,下拉刷新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最详细的vue+vant的上拉加载,下拉刷新相关的知识,希望对你有一定的参考价值。

参考技术A 第一步:一进来的时候页面会加载@load = "onLoad"绑定的onLoad函数。

接口返回的数据

这边额外做个补充:
如何这边涉及到兄弟组件之间传递数据,需要用到

vue基于vant实现上拉加载下拉刷新

前言

普遍存在于各种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的上拉加载,下拉刷新的主要内容,如果未能解决你的问题,请参考以下文章

JS或者jquery的上拉加载和下拉刷新是怎么实现的

为啥使用mui的上拉刷新下拉加载后在电脑上的刷新加载正常手机上就不正常了

uni app 实现简单的上拉加载,下拉刷新

PullToRefreshScrollView的上拉加载下拉刷新

Android开发之头部悬浮的上拉加载,下拉刷新的列表

vantui的上拉加载及下拉刷新的使用示例