Vue3+vant+ts 上滑加载解决上滑调用多次数据的问题(推荐)

之前用vue2的时候,写过vue2的用法,文末扩展知识点击查看,用得挺好的,也没啥问题,照葫芦画瓢的做出来了,但是有问题,下滑之后调用多次数据,按理说

组件通过 loading 和 finished 这俩变量控制加载状态,当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。若数据已全部加载完毕,则直接将 finished 设置成 true 即可。

但是我打印了一下,在调用方法的时候没有把loading设置为true,还是false,后来才发现,和vue2还是有区别的,不能直接用v-model,得用v-model:loading,还是得看手册啊,不能老看之前做的项目

具体代码如下:

页面:<van-list
            v-model:loading="loading"
            :finished="finished"
            :finished-text="nodata"
            :immediate-check="false"
            @load="getList"
            >

        <div 
                v-for="item in proList"
                :key="item.Id"
                >
        </div>

 </van-list>

<script lang="ts" setup>
onMounted(() => {
    getList();
})
const loading = ref(false);
const finished = ref(false);
const state = reactive<any>({ 
      proList: [], //产品列表数据 
      nodata: "", 
      page: 1, //页码
      pageSize: 20, //每页条数
})
 
 //获取数据
const getList = ()=>{
    
    let params = {
        pageNo:state.page,
        pageSize:state.pageSize
    };
    axios.getdata(params).then((res:any) => {
        if (res.code == 200) {
            state.page ++;   //页数+1

            loading.value = false;  // 加载状态结束
                    state.proList = state.proList.concat(res.data);
                    //判断是否是最后一页
                    if (res.data.length < state.pageSize) {
                        finished.value = true ;
                        state.nodata = "已经到底了";
                    }
                    if (state.proList.length == 0) {
                        finished.value = true;
                        state.nodata = "暂无数据";
                    } 

          }
    })
} 
</script>

扩展知识点:

Vue插件—vant当中van-list的使用

先看官网  点这里

1、安装

npm i vant -S

2、引入 在src/main.js里面引入

import Vue from 'vue';
import { List } from 'vant';
Vue.use(List);

3、使用  teamplate

//van-list  是必须带的标签,里面的标签可以自己加
  <van-list
        v-model="loading"
        :finished="finished"
        finished-text="没有更多啦"
        @load="load_more"
        class="publist"
      >
         <li v-for="(item,ing) of list" :key="ing">{{item.name}}</li>

      </van-list>

script

export default {
  name: 'Home',
  data(){
    return{
      list: [],
      loading: false,//加载状态
      finished: false,//是否加载
      page: 1,//页数
    limit: 15//条数
    }
  },
 methods:{
    load_more: function() {
      this.page += 1;//页数+1
      this.onLoad();
    },
    onLoad() {
        let data = {
        page: this.page,
        pageSize: this.limit
        }
        axios.post('api/test/xbxxf',data)
        .then(res => {
          if(res.data.code=200){
            // 加载状态结束
            this.loading = false;
            this.list = this.list.concat(res.data.data.list);//追加数据
            if (res.data.data.page == res.data.data.pageNum || res.data.data.list.length == 0) {  //数据全部加载完成
              this.finished = true;
            }else{
              this.finished = false;
            }
          }
        })
      }
}
}

另外注意css,因为滑动加载,看你滑动的是不是当前模块,如果滑动的不是当前的模块,是父元素或者其他的元素,不会触发加载事件,也不会请求数据    

到此这篇关于Vue3+vant+ts 上滑加载解决上滑调用多次数据的问题的文章就介绍到这了,更多相关Vue3 vant ts 上滑加载内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue3中使用vant的踩坑实战日记

    目录 前言 一.下载vant 二.下载插件 三.配置插件 四.简单使用 五.我的解决方法 总结 前言 我照着视频中老师教的方式去使用vant(和官网教程一样),发现样式根本不起作用(想截个图来着,但是vite热更新太厉害了,找不到了哈哈哈),然后又反复看了视频一遍,检查自己插件啥的而又没有安装好,发现和老师的一样....,头疼…害...,幸好我最后在想用不用在main.js引入vant(因为老师说插件会自动识别,所以一开始一直以为是自己配置或者代码写错了的问题QAQ),最后成功了嘿嘿嘿(但是这样

  • vue3+ts+vant移动端H5项目搭建的实现步骤

    目录 1.全局安装vue-cli 2.使用vue ui 可视化创建项目 3.打开项目 4.安装vant,并实现按需引入 5.移动端适配(rem) 使用vue-cli搭建项目 1.全局安装vue-cli npm install -g @vue/cli 安装完成验证 vue -V 2.使用vue ui 可视化创建项目 2.1 vue ui vue ui 2.2 点击创建 点击创建 在learn目录下创建项目 填写创建的项目名,选择包管理器npm 2.3 点击下一步 选择手动,点击下一步 2.4 选择

  • 使用Vite+Vue3+Vant全家桶快速构建项目步骤详解

    目录 引言 一.vue3全家桶模板介绍 1.版本依赖 2.全家桶内置集成 二.安装 tive-cli 命令行工具 三.生成项目 四.项目体验 引言 随着Vue3 和 Vite 版本的不断更新完善,开发体验有了质的飞跃.因此,越来越多的大厂也逐步拥抱 Vue3. 利用Vite 脚手架工具可以很轻松生成以 Vue3 为模板的项目,但是作为Vue全家桶的 vue-router.vuex.axios等成员,需要自己一个一个去配置.于是便自行开发了本文讲到的 tive-cli 脚手架模板工具,只需短短几个

  • vue3如何使用vant-picker封装省市二级联动

    目录 首先,项目中引入vant-ui 子组件代码PickerArea 父组件代码 怕什么真理无穷,进一步有进一步的欢喜呀,不得不承认的就是,兴趣和擅长是一个良性迭代的循环啊,你擅长某件事情,就会越喜欢它,越喜欢,就越愿意花时间,进而越擅长.所以代码码起来吧哈哈哈 近期用上了vue3,还顺手写了个小需求,用vant-picker封装一个省市的二级联动,并且在从后端接口获取省市的数据,点开弹出框需要展示默认的选项,比如点击广东省-深圳市输入框,弹出的picker级联选择器需要默认广东 -深圳. 如下

  • Vue3+vant+ts 上滑加载解决上滑调用多次数据的问题(推荐)

    之前用vue2的时候,写过vue2的用法,文末扩展知识点击查看,用得挺好的,也没啥问题,照葫芦画瓢的做出来了,但是有问题,下滑之后调用多次数据,按理说 组件通过 loading 和 finished 这俩变量控制加载状态,当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true.此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可.若数据已全部加载完毕,则直接将 finished 设置成 true 即可. 但是我打印了一下,在调用方

  • Android ListView 实现上拉加载的示例代码

    本文介绍了Android ListView 实现上拉加载的示例代码,分享给大家,具体如下: 我们先分析一下如何实现 ListView 上拉加载. 当我们上拉的时候,会出现一个提示界面,即 ListView 的 Footer 布局. ListView 要实现滚动,所以要监听 ListView 滚动事件,即 OnScrollListener() 事件. 当我们开始滚动时,Footer 布局才慢慢显示出来,所以需要监听 ListView 的 onTouch() 事件. 实现思路 首先判断 ListVi

  • Flutter ListView 上拉加载更多下拉刷新功能实现方法

    先上图 下拉刷新 跟原生开发一样,下拉刷新在flutter里提供的有组件实现 RefreshIndicator 一直不明白为啥组件中都提供下拉刷新,但就是没有上拉加载!! 我这请求接口数据用的是 http 库,是个第三方的是需要安装的 https://pub.dev/packages/http 用法如下 class MyHomePage extends StatefulWidget { MyHomePage({Key key}) : super(key: key); @override MyHo

  • 解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)

    1. 页面在手机端不能上下滑动,在PC端浏览器正常滑动 说明:在设置了overflow:auto;属性的前提下,H5页面在PC端浏览器里展示可以上下滑动,在ios上可正常滑动,在安卓手机 上不能上下滑动:这现象并不是ios和安卓兼容性问题! 原因:设置了touch-action: none;这属性为局部或者全局属性,将这条属性注释即可正常滑动. 2.使用PullRefresh和List列表实现下拉刷新和上拉加载时出现的问题 问题1. 下拉刷新时在手机上,不论滑到任何位置,只要下拉就刷新 原因:滑

  • 解决ionic和angular上拉加载的问题

    说到ionic上拉加载就跟pc的分页是一样的,他需要在html数据列表的最下面边添加 <ion-infinite-scroll ng-if="hasmore" on-infinite="loadMore()" distance="10%"> </ion-infinite-scroll> 当列表为空 当ng-if为true的时候, 列表没有被填充满的时候 ,他就会自动加载loadMore(): <span style=

  • 微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)

    微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一) 页面缓存的设置优化了页面加载,减少了频繁的调取接口,使用户在断网的情况下有更好的体验. 每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorageSync).wx.clearStorage(wx.clearStorageSync)可以对本地缓存进行设置.获取和清理.本地缓存最大为10MB. 注意: localSt

  • 解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题

    所遇问题: 该页面为双选项卡联动,四个部分都需要上拉加载和下拉刷新功能,使用的mint-ui的loadmore插件,分别加上上拉加载后,只有最后一个的this.$refs.loadmore.onTopLoaded();和this.$refs.loadmore.onBottomLoaded(); 有效,其他的三个都无效,这两句话是意思是查询完要调用一次,用于重新定位 分析原因: 首先这四个模块都是用的 <mt-loadmore :top-method="loadTop" :bott

  • 解决vue-loader加载不上的问题

    前言: webpack 整合vue 的时候,遇到了一个大坑,找了好多资料才弄好 我们知道 webpack - - -默认 无法解析 .vue 为后缀的文件,所以webpack需要下载一个解析 .vue 文件的 loader 下载 vue-loader 的方法有许多 ,我是 使用 vue-loader 是要依赖 vue 的,所以先下载 vue npm i vue -S cnpm i vue-loader vue-template-compiler -D webpack.config.js 中配置相

  • 微信小程序scroll-view实现上拉加载数据重复的解决方法

    微信小程序的 scroll-view 上拉加载更多的BUG(数据会多加载,甚至有重复数据). 问题描述:上拉一次,会多次触发触底函数 onReachBottom():换成自定义加载更多函数, 例如 loadMore(), 问题依旧存在. 生产环境:调试基础库 目前最新版本1.9.94 依旧存在这个问题. 解决方法:加状态控制变量,限制 触底函数/加载更多函数 的触发条件. 页面上拉加载更多后,看下图,有重复数据 通用前端wxml代码 search.wxml <!--pages/shop/sear

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

    前言 普遍存在于各种app中的上拉加载下拉刷新功能大家都不陌生吧,一般来说,在数据量比较大的情况下,为了更快的渲染和给用户更好的观感体验,我们会将数据做分页处理,让其批量加载,这样一来,在渲染速度上,能给用户一个比较好的体验效果.话说回来,分页处理,也就是我们今天要讲的上拉加载和下拉刷新. 实现思路 下拉刷新: 请求接口赋完值后,将接口返回数据长度与总条数进行比较控制加载不加载的状态,在下拉刷新方法中定义起始页码为第一页,调整加载的状态为false,最后调用请求数据的接口方法,做适当轻提示即可.

随机推荐