vue基于vant实现上拉加载下拉刷新的示例代码

 更新时间:2022年01月18日 10:23:32   作者:水星记_  
普遍存在于各种app中的上拉加载下拉刷新功能,本文主要介绍了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上拉加载下拉刷新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue Spa切换页面时更改标题的实例代码

    Vue Spa切换页面时更改标题的实例代码

    本篇文章主要介绍了Vue Spa切换页面时更改标题的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 关于Vue的路由权限管理的示例代码

    关于Vue的路由权限管理的示例代码

    本篇文章主要介绍了关于Vue的路由权限管理的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • vue3自定义指令自动获取节点的width和height代码示例

    vue3自定义指令自动获取节点的width和height代码示例

    这篇文章主要介绍了如何使用ResizeObserver监听组件的宽度和高度,并将其封装成一个指令以便全局或局部使用,ResizeObserver可以监听元素的多个尺寸属性,如top、bottom、left等,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-11-11
  • vue瀑布流组件实现上拉加载更多

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

    这篇文章主要为大家详细介绍了vue瀑布流组件实现上拉加载更多,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Vue实现动态显示表单项填写进度功能

    Vue实现动态显示表单项填写进度功能

    这篇文章主要介绍了Vue实现动态显示表单项填写进度功能,此功能可以帮助用户了解表单填写的进度和当前状态,提高用户体验,通常实现的方式是在表单中添加进度条,根据用户填写状态动态更新进度条,感兴趣的同学可以参考下文
    2023-05-05
  • vue3+Ts使用pinia方式(vue-lic搭建项目)

    vue3+Ts使用pinia方式(vue-lic搭建项目)

    文章介绍了如何在Vue 3项目中使用Pinia进行状态管理,主要内容包括安装Pinia、初始化、在main.ts中注册和使用,以及在.vue的setup中使用state,文章还提到getters和actions的使用可以参考官方文档,总结部分表达了作者希望得到大家支持的意愿
    2025-01-01
  • vue引入jq插件的实例讲解

    vue引入jq插件的实例讲解

    下面小编就为大家带来一篇vue引入jq插件的实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Template ref在Vue3中的实现原理详解

    Template ref在Vue3中的实现原理详解

    这篇文章主要为大家介绍了Template ref在Vue3中的实现原理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Vue.component的属性说明

    Vue.component的属性说明

    这篇文章主要介绍了Vue.component的属性说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Vue3如何根据搜索框内容跳转至本页面指定位置

    Vue3如何根据搜索框内容跳转至本页面指定位置

    在开发中我们经常遇到这样的需求,根据要求跳转至本页面指定位置,这篇文章主要给大家介绍了关于Vue3如何根据搜索框内容跳转至本页面指定位置的相关资料,需要的朋友可以参考下
    2022-11-11

最新评论