首页 web前端 js教程 vue-infinite-loading2.0使用说明

vue-infinite-loading2.0使用说明

May 02, 2018 am 09:41 AM
使用说明

这次给大家带来vue-infinite-loading2.0使用说明,vue-infinite-loading2.0使用的注意事项有哪些,下面就是实战案例,一起来看一下。

简介

这是一个使用在Vue.js中的无限滚动插件,它可以帮助你快速创建一个无限滚动列表。

特点

  1. 移动端支持友好

  2. 兼容任何一个可以滚动的元素

  3. 有不同的旋转器可以作为加载动画

  4. 支持加载后显示结果

  5. 支持两个方向的无限加载

安装

注意: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,
 }
...
登录后复制

开始

基础使用

在本例中,我们将创建一个基本的无限列表,有如下三个步骤:

  1. 在你的模板中,用v-for创建一个列表

  2. 将InfiniteLoading组件放在列表的底部;

  3. 将InfiniteLoading组件的ref属性设置为infiniteLoading,因为要用它来触发事件。

  4. 为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代替分页

在开始这个例子之前,我们需要准备以下内容:

  1. 获取新闻列表的API,在本例中我们使用 HN Search API

  2. 导入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" >
   ![](https://news.ycombinator.com/y18.gif)
  </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="&#39;https://news.ycombinator.com/user?id=&#39; + item.author" rel="external nofollow" rel="external nofollow" 
    v-text="item.author"></a>
    |
   <a target="_blank" :href="&#39;https://news.ycombinator.com/item?id=&#39; + item.objectID" rel="external nofollow" rel="external nofollow" 
    v-text="item.num_comments + &#39; comments&#39;"></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" >
  ![](https://news.ycombinator.com/y18.gif)
 </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="&#39;https://news.ycombinator.com/user?id=&#39; + item.author" rel="external nofollow" rel="external nofollow" 
     v-text="item.author"></a>
   |
   <a target="_blank" :href="&#39;https://news.ycombinator.com/item?id=&#39; + item.objectID" rel="external nofollow" rel="external nofollow" 
     v-text="item.num_comments + &#39; comments&#39;"></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无限加载vue-infinite-loading使用详解

以上是vue-infinite-loading2.0使用说明的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

一加budsPro怎么使用_一加budsPro使用说明 一加budsPro怎么使用_一加budsPro使用说明 Mar 23, 2024 am 10:11 AM

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

UniApp实现支付功能的接入与使用说明 UniApp实现支付功能的接入与使用说明 Jul 04, 2023 am 10:27 AM

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

如何使用Hyperf框架进行多语言处理 如何使用Hyperf框架进行多语言处理 Oct 20, 2023 am 11:10 AM

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

uniapp中如何使用视频录制功能 uniapp中如何使用视频录制功能 Jul 06, 2023 pm 06:51 PM

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

利用高级筛选选项进行数据筛选 利用高级筛选选项进行数据筛选 Feb 18, 2024 pm 02:11 PM

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

cookies的详细使用说明 cookies的详细使用说明 Feb 22, 2024 pm 12:21 PM

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

自在找app这款软件应该怎么使用 软件的使用教程 自在找app这款软件应该怎么使用 软件的使用教程 Mar 12, 2024 pm 02:22 PM

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

win7activation激活工具使用方法 win7activation激活工具使用方法 Jul 17, 2023 pm 08:37 PM

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

See all articles