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,
 }
...
ログイン後にコピー

Start

基本的な使用法

この例では、基本的な無限リストには次の 3 つの手順があります:

  1. テンプレートで v-for を使用してリストを作成します

  2. InfiniteLoading コンポーネントをリストの一番下に配置します

  3. InfiniteLoading を配置します。コンポーネント ref 属性はイベントのトリガーに使用されるため、infiniteLoading に設定されます。

  4. 読み込み

    コールバック関数を作成し、InfiniteLoadingコンポーネントにバインドします。

テンプレート

<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>
ログイン後にコピー

スクリプト

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 では、毎回 20 個の数値をリスト配列にプッシュします。 setTimeout を使用して非同期リクエストをシミュレートします。最後に、$InfiniteLoading:loaded イベントをトリガーすることを忘れないでください。これにより、データが正常にダウンロードされたことが InfiniteLoading コンポーネントに通知されます。

これで、上記のコードに基づいて効果を示すことができます。

例: ハッカー ニュース リスト ページ

この例では、ハッカー ニュース リスト ページを模倣しますが、InfiniteLoading を使用します。 replaceページネーション

この例を開始する前に、以下を準備する必要があります:

  1. ニュースリストを取得するための API、この例では HN Search API を使用します

  2. axios プラグインをインポートするrequest data

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>
ログイン後にコピー
テンプレートでは、Hacker News リストのヘッダーとリストを作成しました。この例の InfiniteLoading コンポーネントは、前の例とは多少異なる方法で使用されます。 スロットに基づいてデータがなくなった場合のプロンプトの内容をカスタマイズしました。

Script

import InfiniteLoading from &#39;vue-infinite-loading&#39;;
import axios from &#39;axios&#39;;
const api = &#39;http://hn.algolia.com/api/v1/search_by_date?tags=story&#39;;
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
 }
}; <strong>onInfinite</strong> 関数では、ニュースのページをリクエストし、毎回リスト配列にプッシュします。 3 ページのニュースをリクエストすると、<strong>$InfiniteLoading:complete</strong> イベントがトリガーされ、ロードするデータがもうないことが <strong>InfiniteLoading</strong> コンポーネントに通知されます。これ以上データがないことを示すために、テンプレートでカスタマイズしたプロンプトの内容が表示されます。 <p style="text-align: left;"></p>
<p style="text-align: left;">スタイル<strong></strong></p>
<pre class="brush:php;toolbar:false">.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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

OnePlus budsPro の使用方法_OnePlus budsPro の手順 OnePlus budsPro の使用方法_OnePlus budsPro の手順 Mar 23, 2024 am 10:11 AM

1. ノイズリダクションモードと透明モードを切り替える イヤホンのハンドルを約1秒間長押しすると、ノイズリダクションモードと透明モードが切り替わります。 2. 音楽モードで、イヤホンハンドルを 1 回押すと音楽を一時停止または再生し、イヤホンハンドルを 2 回押すと次の曲を再生し、イヤホンハンドルを 3 回押すと前の曲を再生するか音声を起動します。 3. 通話モードでは、通話中にイヤホンのハンドルを 1 回押して、通話に応答するか電話を切ります。 4. リセット方法 イヤホンボックスを開け、充電ボックスのインジケーターライトが赤に5回点滅したらボタンを放すとイヤホンがリセットされます。 3. 電話の接続方法 1. 充電ボックスを開きます。 2. 設定ボタンを 2 秒間押し続けます。 3. 電話画面にポップアップ ウィンドウが表示されたら、クリックして接続を確認します。 4. バッテリー状態の確認方法 1. イヤホンを携帯電話に接続すると、携帯電話画面のポップアップ ウィンドウでイヤホンと充電ボックスのバッテリー レベルを確認できます。 2、

UniAppの支払い機能にアクセスして使用するための手順 UniAppの支払い機能にアクセスして使用するための手順 Jul 04, 2023 am 10:27 AM

UniApp の支払い機能にアクセスして使用するための手順: モバイル決済の人気に伴い、多くのアプリケーションは、ユーザーがオンライン支払いを容易にするために支払い機能を統合する必要があります。 UniAppは、Vue.jsをベースとしたクロスプラットフォーム開発フレームワークとして、ワンタイム開発とマルチプラットフォーム利用の特徴を持ち、決済機能を簡単に実装できます。この記事では、UniApp の支払い機能にアクセスする方法とコード例を紹介します。 1. 支払い機能にアクセスするには、アプリ側の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カメラコンポーネントを使用してビデオ録画機能を実装できます。まず、ユニをインストールする必要があります。

高度なフィルタリング オプションを使用してデータをフィルタリングする 高度なフィルタリング オプションを使用してデータをフィルタリングする Feb 18, 2024 pm 02:11 PM

高度なフィルタリングを使用してデータをフィルタリングする方法 日常業務において、大量のデータをフィルタリングすることは非常に一般的かつ重要なタスクです。従来のフィルタリング機能では、より正確かつ複雑なデータのフィルタリングのニーズを満たすことができない可能性があります。この問題を解決するために、多くのオフィス ソフトウェアは、ユーザーがデータをより効率的にフィルタリングできる高度なフィルタリング機能を提供しています。この記事では、高度なフィルタリング機能を使用してデータをフィルタリングする方法について説明します。ステップ 1: データを準備する 高度なフィルタリング機能を使用する前に、まずフィルタリングするデータを準備する必要があります。データが完全であることを確認してください

Cookie の使用に関する詳細な手順 Cookie の使用に関する詳細な手順 Feb 22, 2024 pm 12:21 PM

Cookie は、Web サイト上でのユーザーの個人的な好みや行動に関する情報を保存するために使用される一般的な Web テクノロジーです。今日のデジタル時代では、ほとんどすべての Web サイトが Cookie を使用して、パーソナライゼーションと優れたユーザー エクスペリエンスを提供しています。この記事では、ユーザーがこのテクノロジーをよりよく理解し、習得できるように、Cookie の使用方法を詳しく紹介します。まず、Cookie の基本的な概念を理解しましょう。 Cookie は、Web サイトによってユーザーのブラウザに保存される小さなテキスト ファイルであり、Web サイトへのユーザーの訪問に関する情報が含まれています。

ソフトウェアZizai Zhaoの使い方 ソフトウェア使用チュートリアル ソフトウェアZizai Zhaoの使い方 ソフトウェア使用チュートリアル Mar 12, 2024 pm 02:22 PM

Zizai Zhaoアプリの使い方は?このソフトウェアは、ユーザーが失くしたものを素早く見つけるのに役立つだけでなく、すべてを素早く持ち出すことができる専用のスマートリマインダー機能も備えています。このような使いやすいソフトウェアを使用する必要があります。ダウンロードしたばかりのユーザーにとって、すぐに内容を取得したい場合、このソフトウェアをどのように操作すればよいでしょうか?それでは、このソフトの操作方法を見てみましょう. 迅速な商品の検索に効果的に役立つことを願っています. 自在趙アプリソフトの使い方のチュートリアル. 1. 当サイトが提供するナッツ自在趙アプリソフトをダウンロードし、ターンしますon Bluetooth、お使いの携帯電話がそれをサポートしている必要があります Bluetooth 4.0 2. ソフトウェアを開き、新しいユーザーを登録します。携帯電話で登録するか、Weibo または 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