做vue项目用到下拉滚动加载数据功能,由于选的UI库(element)没有这个组件,就用Vue-infinite-loading 这个插件代替,使用中遇到的一些问题及使用方法,总结作记录!

安装:npm install vue-infinite-loading –save

引入

ES6

import InfiniteLoading from 'vue-infinite-loading';export default {components: {InfiniteLoading,},
};

CommonJS

const InfiniteLoading = require('vue-infinite-loading');export default {components: {InfiniteLoading,},
};

1.用法一(基本用法)

Template

<div><p v-for="item in list">Line:<span v-text="item"></span></p><!--infinite-loading这个组件要放在列表的底部,滚动的盒子里面!--><infinite-loading @infinite="infiniteHandler"></infinite-loading>
</div>

Script

import InfiniteLoading from 'vue-infinite-loading';export default {data() {return {list: [],};},methods: {infiniteHandler($state) {setTimeout(() => {const temp = [];for (let i = this.list.length + 1; i <= this.list.length + 20; i++) {temp.push(i);}this.list = this.list.concat(temp);$state.loaded();}, 1000);},},components: {InfiniteLoading,},
};

2.用法二(一般的分页数据)

Template

<div class="hacker-news-list"><ul><li class="hacker-news-item" v-for="(item, key) in list"></li></ul><infinite-loading @infinite="infiniteHandler"><span slot="no-more">There is no more Hacker News</span></infinite-loading>
</div>

Script

import InfiniteLoading from 'vue-infinite-loading';
import axios from 'axios';export default {data() {return {list: [],};},methods: {infiniteHandler($state) {const api="http://xxxx.com/xxx"axios.get(api, {   //api为你请求数据地址params: {page: this.list.length / 10 + 1,   //页码参数(10条每页)
        },}).then((response) => {if (response.data.length) {this.list = this.list.concat(response.data);  //response.data为你请求接口返回的数组列表
          $state.loaded();if (this.list.length / 10 === 10) {$state.complete(); //这里是加载了10页数据,设置不在加载
          }} else {$state.complete();}});},},components: {InfiniteLoading,},
};

$state: 该组件会传递一个特殊的事件参数$state给事件处理器来改变加载状态,
$state参数包括三个方法,它们是loaded方法,complete方法和reset方法。

  • loaded方法用于在每次加载数据后停止播放动画,然后该组件将准备好进行下一次触发。
  • complete方法用于完成完整的无限加载,则该组件将不再处理任何滚动操作。如果在loaded调用complete方法时永远不会调用该方法,则此组件将显示用户的否结果消息,如果不是,则将显示不再有用户消息,并且可以按slot设其它内容
  • reset方法是将组件返回到原来的状态

3.用法三

一般的无限滚动下拉加载数据会带有筛选条件。比如根据不同条件选择出来的列表,或者改变某个状态重新渲染列表就要用这个用法了

Template

<div class="hacker-news-list"><div class="hacker-news-header"><!--下拉改变--><select v-model="tag" @change="changeFilter()"><option value="story">Story</option></select><!--或者点击改变--><button @click="changeFilter()">搜索</button></div><ul><li class="hacker-news-item" v-for="(item, key) in list"></li></ul><infinite-loading @infinite="infiniteHandler" ref="infiniteLoading">  <!--不要忘记设置这个 ref="infiniteLoading"--><span slot="no-more">There is no more Hacker News</span></infinite-loading>
</div>

Script

import InfiniteLoading from 'vue-infinite-loading';
import axios from 'axios';export default {data() {return {list: [],tag: 'story',};},methods: {infiniteHandler($state) {const api="http://xxxx.com/xxx"axios.get(api, {   //api为你请求数据地址params: {tags: this.tag,  //改变的条件参数page: this.list.length / 10 + 1,},}).then(({ data }) => {if (data.hits.length) {this.list = this.list.concat(data.hits);$state.loaded();if (this.list.length / 20 === 10) {$state.complete();}} else {$state.complete();}});},//改变条件条用此方法
    changeFilter() {this.list = [];this.$nextTick(() => {this.$refs.infiniteLoading.$emit('$InfiniteLoading:reset');});},},components: {InfiniteLoading,},
};

4.其他用法(特殊条件手动触发)

在大多数情况下,我们希望立即为空列表加载数据,这也是该组件的默认行为。如果你只想控制第一次加载,你可以简单地使用v-if和v-else指令来实现它,但是如果,在一些复杂的情况下,我们需要手动每三页加载一次数据,我们可以使用该方法,

这里我不做详细介绍。有这个需求的可以去看看官方文档:vue-infinite-loading

转载于:https://www.cnblogs.com/tuspring/p/9803424.html

vue2.0无限滚动加载数据插件相关推荐

  1. php 无限滚动加载,无限滚动,_无限滚动加载数据问题,无限滚动 - phpStudy

    无限滚动加载数据问题 做移动端程序的时候,经常会遇到无限滚动的功能,通常实现无限滚动的方式是页面滚动到底部后出发一个ajax请求,后端返回数据然后动态追加DOM,但是如果DOM结构很复杂,追加的时候拼 ...

  2. 【无限滚动加载数据】—infinite-scroll插件的使用

    网上对于infinite-scroll插件使用的例子不多.但由于它的出现,鼓吹了瀑布流形式的页面展示方式,所以不得不了解了解这种新的分页方式. 官网上有对infinite-scroll的详细描述,但一 ...

  3. AngularJS 无限滚动加载数据控件 ngInfiniteScroll

    为什么80%的码农都做不了架构师?>>>    1.什么是 InfiniteScroll?  无限滚动(Infinite Scroll)也称为自动分页.滚动分页和无限分页.常用在图片 ...

  4. Infinite-Scroll无限滚动加载数据

    无限滚动的实现原理:当滚动条到底离网页底部一定长度的时候,向后台发送页数并获取数据. 首先我们在页面上先放置10条数据,即第一页,每一项都是p标签: <div id="content& ...

  5. 基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多

    通过多次爬坑,发现了这些监听滚动来加载更多的组件的共同点, 因为这些加载更多的方法是绑定在需要加载更多的内容的元素上的, 所以是进入页面则直接触发一次,当监听到滚动事件之后,继续加载更多, 所以对于无 ...

  6. 01-vue项目之滚动加载数据

    最近刚结束了一个vue项目,项目中发现了自己很多问题,例如,看到功能就想要使用插件,(⊙o⊙)-,这样是肯定不行呀,哎,用插件可以,自己也得会写呀,现在就记录一下一个不错的滚动加载数据. 1.页面布局 ...

  7. vue 实现数据滚动显示_vue 滚动加载数据

    table数据多的时候打开页面会加载一会才显示数据,这样体验不好,所以要做滚动加载数据 {{eventMap[scope.row.eventId] == null ? '--': eventMap[s ...

  8. jquery ajax 滚动加载数据

    jquery php 滚动加载数据(文件包 rollingpage) 效果如下: 页面加载时候($function(){ 自动加载第一页数据 }) 设置: var winH = $(window).h ...

  9. 无限滚动加载最佳实践

    无限滚动加载最佳实践 无限滚动(Infinite scrolling),有时候被称为无尽滚动(endless scrolling),这种技术允许用户在大量内容上滚动,眼中看不到结束的地方.这种技术很简 ...

最新文章

  1. pandas使用loc函数更新、修改dataframe指定数据行的内容(update or change the content of specific row of dataframe)
  2. SDL2源码分析6:拷贝到渲染器(SDL_RenderCopy())
  3. delphi批量存入多媒体字段 遇到内存溢出的坑
  4. onvif 开发之video streamer---onvif实现功能和经验
  5. mysql练习用的数据集下载(转载+自己补充步骤)
  6. wordpress发布模块_微慕WordPress小程序专业版v3.0发布
  7. php如何看phpinfo(),如何从phpinfo中获取有效信息 | 学步园
  8. 浅谈jquery之on()绑定事件和off()解除绑定事件
  9. win2003域迁移实战记录
  10. Visual C++开发工具与调试技巧整理
  11. 广工十四届校赛 count 矩阵快速幂
  12. jenkins插件镜像源
  13. 三倍快乐!推荐跨Win/Mac/Linux平台免费优质软件
  14. 《数据结构教程(第五版) 李春葆主编》判断题(第一章-第十章)
  15. RocketMQ(七) RocketMQ的两种消费模式
  16. PaddlePaddle飞浆搭建和机器学习文字识别
  17. 什么是入侵检测系统?有哪些分类?
  18. pytest之标记会失败的测试:pytest.mark.xfail
  19. AD使用中各个层的含义,阻焊层与驻焊层的区别;
  20. CSS一个摇摆的大红灯笼

热门文章

  1. python自动化办公脚本下载-基于python实现自动化办公学习笔记二
  2. python介绍和用途-python匿名函数的介绍及用途
  3. python怎么识别拼音-python获取一组汉字拼音首字母的方法
  4. redis中的intset
  5. linux文件目录详细介绍
  6. Python 之 random模块
  7. C#如何打开一个窗体,同时关闭该窗体
  8. windows守护进程脚本
  9. Java网络编程之TCP、UDP
  10. 微信公众号获取的图片不能正常显示的问题