Vue如何实现分批加载数据

目录
  • 分批加载数据
  • 滚动加载数据

分批加载数据

最近在写vue的项目,因为后台返回的数据量太大,在调用了高德地图渲染"polygon"覆盖物的时候处理不过来,直接蹦掉了,然后后台小哥哥和我讲可以分批处理~没想到真的是快了很多很多,眼过千变不如手过一遍~,在此记录一下!!!

首先我们需要定义四个全局的变量

  • pagindex 页码
  • pagesize 一页要请求多少条数据
  • pagetotal 一共要请求多少次(总数 / pagesize),总是是后台返回的~
  • intertimer存的定时器的函数,方便清除定时器
export default {
  name: "map_app",
  inject:['reload'],
  data() {
    return {
      pagindex: 1, //页码
      pagesize: 300, //页/条数
      pagetotal: 0, //一共要请求的次数
      intertimer: null, //定时器
     }
   }
}

然后再methods中写定时器 让定时器每隔三秒再去执行一个方法;

//定时器
getPageInter(map) {
  this.loading = this.$loading({ //加载层
        lock: true,
        text: "拼命加载中",
        spinner: "el-icon-loading",
        background: "rgba(0, 0, 0, 0.7)"
    });
 
    this.intertimer = setInterval(() => {
       this.intervalData(map); //每三秒调用一次方法
      }, 3000);
 },

然后再这个方法里面我们去做判断,如果当前请求的页数超过一共要请求的次数就清楚定时器!

//定时器2
intervalData(map) {
   if (this.pagindex > this.pagetotal) {
        clearInterval(this.intertimer); //关闭定时器
        this.loading.close(); //关闭弹窗
        this.pagindex = 1;
    } else {
        this.renderMesh(map); //数据渲染
        this.pagindex += 1;
      }
},

总数是后台小哥哥返回的,然后我们每次去请求接口的时候要给后台传当前是第几页,还有要请求多少条数据

renderMesh(map) { 
     this.$axios
       .get(this.httpApi + "/api/Main/GetBlockMap", {
          params: {
            BlockCode: this.pageid,
            page: this.pagindex, //当前页码
            rownum: this.pagesize //请求数量
          }
      })
      .then(res => {
       console.log(res);
      })
      .catch(err => {
       console.log("请求失败233");
       });
}

因为我的总数是调用的另外一个接口,然后也写一下代码

    this.$axios
    .get(this.httpApi + "/api/Main/GetBlockMapCount", {
          params: {
            BlockCode: this.pageid
          }
     })
     .then(res => {
          let jsonData = eval("(" + res.data + ")");
          //总数除每次请求多少条数据得出一共要请求多少次
          this.pagetotal = Math.ceil(jsonData.totals / this.pagesize); 
      })
      .catch(err => {
          console.log("请求失败");
      });

滚动加载数据

核心方法:

handleScroll: function () {
      var scrollTop =
        document.documentElement.scrollTop || document.body.scrollTop;
      var windowHeitht =
        document.documentElement.clientHeight || document.body.clientHeight;
      var scrollHeight =
        document.documentElement.scrollHeight || document.body.scrollHeight;
      if (scrollTop + windowHeitht >= scrollHeight - 2000) {
        if (this.scroll) {
          this.GetSpecialData();
        }
      }
    },
    GetSpecialData() {
      this.scroll = false;
      this.page.pageIndex++;
      this.load(this.page, this.query);
    },

监听:

 mounted() {
    window.addEventListener("scroll", this.handleScroll);
  },
  destroyed() {
    window.removeEventListener("scroll", this.handleScroll, false);
  },

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue+element实现动态加载表单

    本文实例为大家分享了vue+element实现动态加载表单的具体代码,供大家参考,具体内容如下 一.问卷动态加载表单 //html <el-form :model="quesPaper" status-icon label-width="100px" label-position="top" size="small" v-loading="paperLoading" > <el-form-

  • 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'> <

  • 详解vue模拟加载更多功能(数据追加)

    使用vue制作加载更多功能,通过ajax获取的数据往data里面push经常不成功,原因是push是往数组中追加数据内容的,而不能用作数组之间的拼接,ajax获取的数据就是数组形式的,因此不成功,应该使用concat()拼接两个数组. //这是错误的写法 $.ajax({ type:'get', async:false, url:path+'no/noticeMobile/getSendNoticeList?imToken='+ getToken +'&pageFlag=2', dataType

  • vue 循环加载数据并获取第一条记录的方法

    最近使用elment ui和vue.js,遇到需要像c:foreach类似的效果,就找了 vue的API:https://cn.vuejs.org/v2/guide/list.html#v-for-with-v-if element ui:http://element.eleme.io/#/zh-CN/component/input 用法: <el-card class="box-card" v-for="(month,index) in monthdata"

  • Vue如何实现分批加载数据

    目录 分批加载数据 滚动加载数据 分批加载数据 最近在写vue的项目,因为后台返回的数据量太大,在调用了高德地图渲染"polygon"覆盖物的时候处理不过来,直接蹦掉了,然后后台小哥哥和我讲可以分批处理~没想到真的是快了很多很多,眼过千变不如手过一遍~,在此记录一下!!! 首先我们需要定义四个全局的变量 pagindex 页码 pagesize 一页要请求多少条数据 pagetotal 一共要请求多少次(总数 / pagesize),总是是后台返回的~ intertimer存的定时器的

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

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

  • 解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题

    Vue使用swiper插件时特别是轮播元素含有动态数据时可能会出现数据为空或者白屏的问题 使用下面的方法可以解决(保证在数据请求之后再渲染页面) 页面结构 <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide tpOne" v-if="topInfo"> <-- 此处为绑

  • vue awesome swiper异步加载数据出现的bug问题

    本人第一次使用vue awesome. 踩到的坑确实不少.官网上面的用法写的很简单,按照上面做法基本会遇到如下这个问题 轮播第二次之后,首屏会自动跳过 网上找了很多资料,都不能解决这个问题.于是自己琢磨了很久终于灵光一闪.一个小技巧解决了这个问题. 使用方法应该很简单,去官网可以查看到方法.基本步骤如下 npm install vue-awesome-swiper --save-dev 在main.js中 import VueAwesomeSwiper from 'vue-awesome-swi

  • vue 使用鼠标滚动加载数据的例子

    关于用鼠标滚动到某个位置我们就去加载数据,这样的场景与业务需求现在越来越常见,现在来分析下<vue.js 实战>中作者的一个解决策略: 1. 设置一个标志位用来判断数据是否在加载中 2. 将滚动区域设置成 overfow:auto(显示滚动条) 3. 给滚动区域加入监听事件并绑定ref属性 来获取DOM实例 4. 当鼠标滚动到底部时,加载数据 4.1 如果此时 标志位为true则 直接退出,不进行此时数据加载 关键代码如下: <template> //...代码省略 //该div

  • Vue实现下拉滚动加载数据的示例

    目录 第一步:安装 第二步:引用 第三步:使用 Web项目经常会用到下拉滚动加载数据的功能,今天就来种草 Vue-infinite-loading这个插件,讲解一下使用方法! 第一步:安装 npm install vue-infinite-loading --save 第二步:引用 import InfiniteLoading from 'vue-infinite-loading'; export default { components: { InfiniteLoading } } 第三步:使

  • 详解使用Vue.Js结合Jquery Ajax加载数据的两种方式

    整理文档,搜刮出一个使用Vue.Js结合Jquery Ajax加载数据的两种方式的代码,稍微整理精简一下做下分享. 废话不多说,直接上代码 html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>demo</title> <script src="js/jquery.js"

  • Javascript vue.js表格分页,ajax异步加载数据

    分页一般和表格一起用,分页链接作为表格的一部分,将分页链接封装成一个独立的组件,然后作为子组件嵌入到表格组件中,这样比较合理. 效果: 代码: 1.注册一个组件 js Vue.component('pagination',{ template:'#paginationTpl', replace:true, props:['cur','all','pageNum'], methods:{ //页码点击事件 btnClick: function(index){ if(index != this.cu

  • vue.js 表格分页ajax 异步加载数据

    Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API. 分页一般和表格一起用,分页链接作为表格的一部分,将分页链接封装成一个独立的组件,然后作为子组件嵌入到表格组件中,这样比较合理. 1.注册一个组件 js Vue.component('pagination',{ template:'#paginationTpl', replace:true, props:['cur','all','pageNum'], methods:{ //页码点击事件 btnClick: f

  • Vue下滚动到页面底部无限加载数据的示例代码

    看到一篇Implementing an Infinite Scroll with Vue.js, 觉得挺实用的就看了下, 顺便简单翻译了一下给需要的人参考. 从这个项目中可以加深对Vue的生命周期的理解, 何时开始axios请求, 如何结合Vue使用原生js来写scroll事件等等, 我这里主要是对原文的重点提取和补充 本文技术要点 Vue生命周期 axios简单用法 moment.js格式化日期 图片懒加载 结合原生js来写scroll事件 请求节流 创建项目 首先创建一个简单的vue项目 #

随机推荐