vue-infinite-loading2.0使用说明
这次给大家带来vue-infinite-loading2.0使用说明,vue-infinite-loading2.0使用的注意事项有哪些,下面就是实战案例,一起来看一下。
简介
这是一个使用在Vue.js中的无限滚动插件,它可以帮助你快速创建一个无限滚动列表。
特点
移动端支持友好
兼容任何一个可以滚动的元素
有不同的旋转器可以作为加载动画
支持加载后显示结果
支持两个方向的无限加载
安装
注意:vue-infinite-loading2.0只能在Vue.js2.0中使用。如果你想在Vue.js1.0中使用,请安装vue-infinite-loading1.3版本
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, }, };
其他方式
<script src="/path/to/vue-infinite-loading/dist/vue-infinite-loading.js"></script>
vue-infinite-loading.js会注册一个全局变量VueInfiniteLoading,使用时需要这样:
... components: { VueInfiniteLoading:VueInfiniteLoading.default, } ...
开始
基础使用
在本例中,我们将创建一个基本的无限列表,有如下三个步骤:
在你的模板中,用v-for创建一个列表
将InfiniteLoading组件放在列表的底部;
将InfiniteLoading组件的ref属性设置为infiniteLoading,因为要用它来触发事件。
为InfiniteLoading组件创建并绑定一个加载回调函数。
Template
<template> <p> <p v-for="item in list"> Line: <span v-text="item"></span> </p> <infinite-loading :on-infinite="onInfinite" ref="infiniteLoading"> </infinite-loading> </p> </template>
Script
import InfiniteLoading from 'vue-infinite-loading'; export default { data() { return { list: [] }; }, methods: { onInfinite() { 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); this.$refs.infiniteLoading.$emit('$InfiniteLoading:loaded'); }, 1000); } }, components: { InfiniteLoading } };
在onInfinite函数中,每次我们都push 20 个数字到list数组中。我们使用setTimeout来模拟异步请求。最后,不要忘了触发一个$InfiniteLoading:loaded事件,它将告诉InfiniteLoading组件,数据已经下载成功。
现在,我们可以根据上面的代码,来显示效果。
例子:黑客新闻列表页面
在这个例子中,我们将模仿一个黑客新闻列表页面,但是会用InfiniteLoading代替分页
在开始这个例子之前,我们需要准备以下内容:
获取新闻列表的API,在本例中我们使用 HN Search API
导入axios插件来请求数据
Template
<p class="hacker-news-list"> <p class="hacker-news-header"> <a target="_blank" href="http://www.ycombinator.com/" rel="external nofollow" rel="external nofollow" >  </a> <span>Hacker News</span> </p> <p class="hacker-news-item" v-for="(item, key) in list"> <span class="num" v-text="key + 1"></span> <p> <a target="_blank" :href="item.url" rel="external nofollow" rel="external nofollow" v-text="item.title"></a> </p> <p> <small> <span v-text="item.points"></span> points by <a target="_blank" :href="'https://news.ycombinator.com/user?id=' + item.author" rel="external nofollow" rel="external nofollow" v-text="item.author"></a> | <a target="_blank" :href="'https://news.ycombinator.com/item?id=' + item.objectID" rel="external nofollow" rel="external nofollow" v-text="item.num_comments + ' comments'"></a> </small> </p> </p> <infinite-loading :on-infinite="onInfinite" ref="infiniteLoading"> <span slot="no-more"> There is no more Hacker News :( </span> </infinite-loading> </p>
在模板中,我们为黑客新闻列表创建了一个header 和 一个list 。在这个例子中的InfiniteLoading组件,与上个例子中使用方式有些不同。我们基于slot自定义了当没有更多数据时的提示内容。
Script
import InfiniteLoading from 'vue-infinite-loading'; import axios from 'axios'; const api = 'http://hn.algolia.com/api/v1/search_by_date?tags=story'; export default { data() { return { list: [] }; }, methods: { onInfinite() { axios.get(api, { params: { page: this.list.length / 20 + 1 } }).then((res) => { if (res.data.hits.length) { this.list = this.list.concat(res.data.hits); this.$refs.infiniteLoading.$emit('$InfiniteLoading:loaded'); if (this.list.length / 20 === 3) { this.$refs.infiniteLoading.$emit('$InfiniteLoading:complete'); } } else { this.$refs.infiniteLoading.$emit('$InfiniteLoading:complete'); } }); } }, components: { InfiniteLoading } };
在onInfinite函数中,我们请求了一页的新闻,并且每次将它们推入到list数组中。如果我们请求了3页新闻,将触发 $InfiniteLoading:complete事件去告诉InfiniteLoading组件,现在已经没有更多数据可以加载了。它将显示我们自定义在模板中的,表示没有更多数据的提示内容。
Style
.hacker-news-list .hacker-news-item { margin: 10px 0; padding: 0 10px 0 32px; line-height: 16px; font-size: 14px; } .hacker-news-list .hacker-news-item .num { margin-top: 1px; margin-left: -32px; float: left; width: 32px; color: #888; text-align: right; } .hacker-news-list .hacker-news-item p { padding-left: 8px; margin: 0; } .hacker-news-list .hacker-news-item .num:after { content: "."; } .hacker-news-list .hacker-news-item p>a { color: #333; padding-right: 5px; } .hacker-news-list .hacker-news-item p a { text-decoration: none; } .hacker-news-list .hacker-news-item p small, .hacker-news-list .hacker-news-item p small a { color: #888; }
与过滤器一块使用
在上个例子的基础上,我们将在头部创建一个下拉选择作为过滤器,当我们改变过滤器,列表将会重新加载。
Template
<p class="hacker-news-list"> <p class="hacker-news-header"> <a target="_blank" href="http://www.ycombinator.com/" rel="external nofollow" rel="external nofollow" >  </a> <span>Hacker News</span> <select v-model="tag" @change="changeFilter()"> <option value="story">Story</option> <option value="poll">Poll</option> <option value="show_hn">Show hn</option> <option value="ask_hn">Ask hn</option> <option value="front_page">Front page</option> </select> </p> <p class="hacker-news-item" v-for="(item, key) in list"> <span class="num" v-text="key + 1"></span> <p> <a target="_blank" :href="item.url" rel="external nofollow" rel="external nofollow" v-text="item.title"></a> </p> <p> <small> <span v-text="item.points"></span> points by <a target="_blank" :href="'https://news.ycombinator.com/user?id=' + item.author" rel="external nofollow" rel="external nofollow" v-text="item.author"></a> | <a target="_blank" :href="'https://news.ycombinator.com/item?id=' + item.objectID" rel="external nofollow" rel="external nofollow" v-text="item.num_comments + ' comments'"></a> </small> </p> </p> <infinite-loading :on-infinite="onInfinite" ref="infiniteLoading"> <span slot="no-more"> There is no more Hacker News :( </span> </infinite-loading> </p>
Script
import InfiniteLoading from 'vue-infinite-loading'; import axios from 'axios'; const api = 'http://hn.algolia.com/api/v1/search_by_date'; export default { data() { return { list: [], tag: 'story' }; }, methods: { onInfinite() { axios.get(api, { params: { tags: this.tag, page: this.list.length / 20 + 1 } }).then((res) => { if (res.data.hits.length) { this.list = this.list.concat(res.data.hits); this.$refs.infiniteLoading.$emit('$InfiniteLoading:loaded'); if (this.list.length / 20 === 10) { this.$refs.infiniteLoading.$emit('$InfiniteLoading:complete'); } } else { this.$refs.infiniteLoading.$emit('$InfiniteLoading:complete'); } }); }, changeFilter() { this.list = []; this.$nextTick(() => { this.$refs.infiniteLoading.$emit('$InfiniteLoading:reset'); }); } }, components: { InfiniteLoading } };
在changeFilter函数中,我们清楚了列表并等待DOM更新,然后我们触发一个$InfiniteLoading:reset事件,目的是让 InfiniteLoading 组件回到最初状态,它将立刻请求新的数据。
Style
在上个例子基础上增加样式
.demo-inner { margin-left: 20px; width: 261px; height: 455px; border: 1px solid #ccc; overflow: auto; } .hacker-news-list .hacker-news-header { padding: 2px; line-height: 14px; background-color: #f60; } .hacker-news-list { min-height: 455px; background-color: #f6f6ef; } .hacker-news-list .hacker-news-header select { float: right; color: #fff; background-color: transparent; border: 1px solid #fff; outline: none; }
服务端渲染
服务端渲染(SSR)是Vue.js2.0的新特性,当你在你的SSR应用中使用这个组件,会得到类似这样的错误:
Error: window is not defined ReferenceError: window is not defined at ... at ... at e.exports (...) at Object. (...) at p (...) at Object.e.exports.render.e (...) at p (...) at Object. (...) at p (...) at e.esModule.default (...)
因为style-loader不支持在这个时候本地导出,详情点这里,所以我们需要下面的变通方案,为了你的SSR应用:
import InfiniteLoading from 'vue-infinite-loading/src/components/Infiniteloading.vue';
代替
import InfiniteLoading from 'vue-infinite-loading';
npm install less less-loader --save-dev 如果你还没有安装它们。
然后你的SSR应用应该运行良好。如果不是,你可以加入这个issue去讨论。
属性
on-infinite
这是一个回调函数,当滚动到距离滚动父元素底部特定距离的时候,会被调用。
通常,在数据加载完成后,你应该在这个函数中发送$InfiniteLoading:loaded事件。
- type Function - reuqired true
distance
这是滚动的临界值。如果到滚动父元素的底部距离小于这个值,那么on-infinite回调函数就会被调用。
- type Number - required false - default 100 - unit pixel
spinner
通过这个属性,你可以选择一个你最喜爱旋转器作为加载动画。点击这里可以看到所有可用的旋转器。
- type String - required false - default 'default'
ref
正如你所知,这个属性是一个Vue.js的官方指令,用来获取子组件的实例。我们需要用它来得到 InfiniteLoading 组件的实例来发送事件。你可以用这种方式来得到实例:this.$refs[the value of ref attribute].
- type String - required true
direction
如果你设置这个属性为top,那么这个组件将在你滚到顶部的时候,调用on-infinite函数。
警告:你必须在数据加载后,手动地将滚动父元素的scrollTop设置为正确的值,否则,该组件会一次又一次调用on-infinite函数。
- type String - default 'bottom'
事件
InfiniteLoading 组件将处理一下事件。如果你需要通过组件的实例来$emit,则可以通过ref属性来得到组件实例。
$InfiniteLoading:loaded
通常,你需要在数据加载后发送这个事件, InfiniteLoading组件将隐藏加载动画,并且准备下一次触发。
$InfiniteLoading:complete
如果InfiniteLoading组件就不会接收$InfiniteLoading:loaded,当你发送这个事件后,它将为用户显示一个没有结果的提示。如果InfiniteLoading组件接收过$InfiniteLoading:loaded,当你发送这个事件的时候,它会为用户显示一个没有更多内容的提示。你可以利用slot来自定义需要显示的内容。
你的onInfinite函数可能像这个样子:
onInfinite() { this.$http.get(url, (res) => { if (res.data) { this.list = this.list.concat(res.data); this.$refs[your ref attirbute's value].$emit('$InfiniteLoading:loaded'); } else { this.$refs[your ref attirbute's value].$emit('$InfiniteLoading:complete'); } }); }
$InfiniteLoading:reset
InfiniteLoading组件将会回到最初的状态,并且on-infinite函数将会立刻被调用。大部分情况下,如果你把这个组件同过滤器或制表符一起使用,这个事件还是有用的。
插槽
你可以利用slot自定义提示的内容,当然,如果你喜欢的话,也可以使用默认内容:
<span slot="{{ slot name }}"> {{ Your content }} </span>
no-results
当InfiniteLoading组件接收到$InfiniteLoading:complete 事件并且它没有接收过$InfiniteLoading:loaded事件时,这个内容会显示出来。
- type String - default No results :(
no-more
当InfiniteLoading组件接收到$InfiniteLoading:complete 事件并且它已经接收过$InfiniteLoading:loaded事件时,这个内容会出现。
spinner
如果,你不喜欢当前旋转器,你可以自定义自己的旋转器作为加载时的动画。
- type HTML - default default spinner
旋转器
你可以用spinner属性,选择你最喜爱的旋转器作为加载动画:
<infinite-loading spinner="{{ spinner name }}"></infinite-loading>
点击这里可以查看几个可用的旋转器。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
Vue无限加载vue-infinite-loading使用详解
以上是vue-infinite-loading2.0使用说明的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

1、降噪模式和通透模式切换长捏耳机柄约1秒钟,可在降噪模式和通透模式之间切换。2、音乐模式单次按捏耳机柄,可暂停或播放音乐两次按捏耳机柄,可播放下一首三次按捏耳机柄,可播放上一首或唤醒语音。3、通话模式通话状态下,单次按捏耳机柄,可接听或挂断电话。4、如何重置打开耳机盒,当充电盒指示灯闪烁红灯5次后,松开按键,耳机重置完毕。三、怎么连接手机1、打开充电盒2、长按设置按键2秒3、待手机屏幕出现弹窗,单击确认连接。四、怎么查看电量情况1、当耳机连接手机时,可在手机屏幕弹窗中查看耳机及充电盒电量。2、

UniApp实现支付功能的接入与使用说明随着移动支付的普及,很多应用都需要集成支付功能,以方便用户进行在线支付。UniApp作为一种基于Vue.js的跨平台开发框架,具有一次开发多平台使用的特点,可以轻松地实现支付功能的接入。本文将介绍UniApp中如何接入支付功能,并给出代码示例。一、支付功能的接入在App端的manifest.json文件中添加支付权限:

如何使用Hyperf框架进行多语言处理引言:随着互联网的全球化,多语言处理成为了很多应用程序开发的必备技能。在Web应用开发中,如果能够支持多语言是非常重要的,因为它可以帮助你更好地满足不同用户的需求。本文将介绍如何使用Hyperf框架进行多语言处理,并提供具体的代码示例。安装Hyperf框架首先,我们需要安装Hyperf框架。可以使用composer命令来

uniapp中如何使用视频录制功能今天,笔者将向大家介绍如何在uniapp开发框架中使用视频录制功能。uniapp是一款跨平台的开发框架,我们可以在一次编写的代码基础上,同时在多个平台中运行我们的应用程序,这对于开发者来说非常方便。在uniapp中,我们可以使用uni-AD-IN摄像头组件来实现视频录制的功能。首先,我们需要在uniapp项目中安装uni-

如何使用高级筛选功能筛选数据在日常工作中,对大量数据进行筛选是一项非常常见和重要的任务。而常规的筛选功能可能无法满足对数据更精确、更复杂的筛选需求。为了解决这个问题,许多办公软件都提供了高级筛选功能,可以帮助用户更高效地筛选数据。本文将介绍如何使用高级筛选功能来对数据进行筛选。第一步:准备数据在使用高级筛选功能之前,首先需要准备好待筛选的数据。确保数据已经整

cookies是一种常见的网络技术,用于存储用户在网站上的个人偏好和行为信息。在今天的数字化时代,几乎所有的网站都使用cookies来提供个性化和更好的用户体验。本文将详细介绍cookies的使用说明,帮助用户更好地理解和掌握这一技术。首先,我们来了解一下cookies的基本概念。Cookies是网站在用户浏览器上存储的小型文本文件,包含有关用户访问网站的一

自在找app这款软件应该怎么使用?这款软件不仅苦于快速的帮助用户找回所丢失的东西,而且里面还有专门的智能提醒功能让你快速的带齐所有的东西。这么好用的软件我们应该如果去使用呢。对刚下载的用户来说,想要让这款软件快速的找回东西,我们应该怎么去操作呢?下面就让我们一起看看这款软件的操作方法,希望能有效的帮助你快速找回商品自在找app软件的使用教程 1、下载本站提供的nut自在找app软件,打开蓝牙,手机需支持蓝牙4.0 2、打开软件,注册新用户。可以选择手机注册,也可微博、QQ登录。 3、将

win7系统跟其他的windows系统一样都是需要激活才能使用全部的功能的。那么如何激活win7呢?常用的方法就是借助win7激活码或者win7激活工具,而比较好用的就是win7activation激活工具了。下面小编给大家介绍下win7activation激活工具使用方法。具体的方法如下:1、首先网上下载“WIN7Activation”(Win7激活工具),把程序拷贝到电脑上,双击打开它。2、然后直接点击:激活,变会自动开始激活状态。3、程序激活win7系统完成后,弹出提示,点击:是。4、重启
