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实现上拉加载下拉刷新的文章就介绍到这了,更多相关vue vant上拉加载下拉刷新内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于vue封装下拉刷新上拉加载组件

    基于vue和原生javascript封装的下拉刷新上拉加载组件,供大家参考,具体内容如下 upTilte插槽是下拉刷新的自定义内容放的地方 downTilte插槽是上拉加载的自定义内容放的地方 默认插槽为列表内容区域 组件代码如下 <template> <div class="refresh" id="refresh"> <slot name="upTilte"></slot> <slot&g

  • vue移动端下拉刷新和上拉加载的实现代码

    由于自身的项目比较简单,只有几个H5页面,用来嵌入app中,所有没有引入移动端的UI框架,但是介于能让用户在浏览H5页面时有下拉刷新和上拉加载,有更好的用户体验,自己写组件实现. 1.下拉刷新DropDownRefresh.vue <template lang="html"> <div class="refreshMoudle" @touchstart="touchStart($event)" @touchmove="

  • vue.js移动端app之上拉加载以及下拉刷新实战

    上拉加载以及下拉刷新都是移动端很常见的功能,在搜索或者一些分类列表页面常常会用到. 跟横向滚动一样,我们还是采用better-scroll这个库来实现.由于better已经更新了新的版本,之前是0.几的版本,更新了一下发现,现在已经是1.2.6这个版本了,新版本多了些 比较好用的api,所以我也重写了之前的代码,用新的api来实现上拉加载以及下拉刷新. 首先把基本的样式写好,这里就略过了,然后引入better-scroll库 import BScroll from 'better-scroll'

  • vue插件mescroll.js实现移动端上拉加载和下拉刷新

    做一个简单的移动端展示项目,后台分页后前端加载,实现上拉加载下一页,找了下,还是用这个mescroll.js插件好一点 1.npm安装 npm install --save mescroll.js //不要使用cnpm安装 导入(在哪个页面使用,则在哪个页面导入(这里的话,我使用全局导入会出现问题,若有错,还请大家指出,暂时想到的就是局部引入)): import MescrollVue from 'mescroll.js/mescroll.vue' 注册组件: components: { Mes

  • vue2.0 移动端实现下拉刷新和上拉加载更多的示例

    本人正在基于 vue2.0 + webpack + es6 搭建前端架构,整理了部分插件,下面这个是下拉更新 上拉更多的,挺好用的,分享给大家. 直接上代码,不懂的多看几遍,下面我换会告诉大家如何使用. <template lang="html"> <div class="yo-scroll" :class="{'down':(state===0),'up':(state==1),refresh:(state===2),touch:tou

  • vueScroll实现移动端下拉刷新、上拉加载

    移动端开发,处理列表翻页和数据的时候,下拉刷新和上拉加载应用的比较广泛,今天给大家推荐一个vue的插件,vueScroll,首先上图: 话不多说,上代码了: 一.引入并使用VueScroll import VueScroller from 'vue-scroller'; Vue.use(VueScroller) 二.在html或者.vue组件里面使用 三.在js文件里面操作插件 首先在在methods里面写上方法 在data里面实现申明好 isLoading = true; 然后继续在metho

  • 基于vue2实现上拉加载功能

    本文实例为大家分享了vue2实现上拉加载展示的具体代码,供大家参考,具体内容如下 因为我们项目中,还用了swiper.很多都是滑动切换的,但是又得上拉加载,所以导致,很多UI框架,我们用了,都有不同的bug出现,没办法,最后写了一个.代码如下(这个因为很多地方会用,所以建议放在components/common下面): <template> <div class="loadmore"> <slot></slot> <slot nam

  • vue瀑布流组件实现上拉加载更多

    最近在做移动端h5页面,所以分页什么的就不能按照传统pc端的分页器的思维去做了,这么小的屏幕去点击也不太方便一般来讲移动端都是上拉加载更多,符合正常使用习惯. 首先简单写一下模板部分的html代码,,很简单清晰的逻辑: <template> <div class="loadmore"> <div class="loadmore__body"> <slot></slot> </div> <d

  • vue loadmore组件上拉加载更多功能示例代码

    最近在做移动端h5页面,所以分页什么的就不能按照传统pc端的分页器的思维去做了,这么小的屏幕去点击也不太方便一般来讲移动端都是上拉加载更多,符合正常使用习惯. 首先简单写一下模板部分的html代码,,很简单清晰的逻辑: <template> <div class="loadmore"> <div class="loadmore__body"> <slot></slot> </div> <d

  • vue实现的上拉加载更多数据/分页功能示例

    本文实例讲述了vue实现的上拉加载更多数据/分页功能.分享给大家供大家参考,具体如下: 加载状态 <div v-if='has_log == 0'> <load-more tip="上拉加载" :show-loading="false" background-color="#fbf9fe"></load-more> </div> <div v-if='has_log == 1'> <

随机推荐