vue-無限スクロールインストール npm インストール vue-infinite-scroll --save 公式もいくつかの読み込み方法を推奨していますが、「最もVueらしい」方法は間違いなくmain.jsに追加することです。 'vue-infinite-scroll' から infiniteScroll をインポートします。 Vue.use(無限スクロール) 実装例公式のコード例では、ルート コンポーネントにコードを記述することを前提としています。実際には、子コンポーネントにコードを記述する必要があるため、コードも少し変更する必要があります。以下に、役立つコード スニペットのみを示します。 <div v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10"> <div v-for="データ内のアイテム" :key="item.index">{{item.name}}</div> </div> データ () { 戻る { カウント: 0, データ: []、 忙しい: false } } メソッド: { ロードモア: 関数() { this.busy = true タイムアウトを設定する(() => { (var i = 0, j = 10; i < j; i++) の場合 { this.data.push({name: this.count++ }) } コンソールログ(このデータ) this.busy = false }, 1000) } } 効果 デフォルトでは、10 行のデータが読み込まれます。ページの一番下までスクロールすると、1 秒後にさらに 10 項目が読み込まれます。その後、スクロールを続けると、さらに 10 項目が読み込まれます。以下のように表示されます。 オプションの説明
その他のオプション:
実用化ご覧のとおり、上記の例ではデータ変数が常に変更されており、データ変数内のデータは絶えず増加しており、これは正しいようです。しかし、実際には、新しいデータは Ajax によって取得される必要があり、例のように for ループを使用して無駄な自然数を挿入する必要はありません。さらに、setTimeout は必要ありません。必要なのは、ページが下までスクロールしたときにすぐに Ajax を実行することです。実際、上記のコードの setTimeout は、遅延読み込み効果をシミュレートするためだけのもので、Ajax を 1 秒間遅延させる必要があると言っているわけではありません。 実際の戦闘では何をすべきでしょうか? データを取得するには、このシミュレートされた Ajax コードを実際の Ajax コードに変更するだけです。 タイムアウトを設定する(() => { (var i = 0, j = 10; i < j; i++) の場合 { this.data.push({name: this.count++ }) } コンソールログ(このデータ) this.busy = false }, 1000) さらに、 vue-スクローラーインストール npm インストール vue-scroller -d main.js での使用 'vue-scroller' から VueScroller をインポートします Vue.use(VueScroller) 使用 注: 高めに設定するのがベスト <スクロールスタイル="top: 100px;" :height='400' :on-refresh="refresh" :on-infinite="infinite" ref="myscroller"> <div class="order-box" v-for="(item,index) in orderList" :key="index"> </div> </スクロール> データ データ(){ 戻る { ステータス: 'すべて', 順序リスト:[], ページ:0, 全ページ:1, } }, 下に引いて更新 更新(完了){ タイムアウトを設定します(()=>{ 終わり(); },1500) }, さらに読み込むには上に引っ張ってください
// プルダウンして無限をトリガーする (完了) { if(this.page>=this.all_page){ タイムアウトを設定します(()=>{ this.$refs.myscroller.finishInfinite(true); },1500) }それ以外{ タイムアウトを設定します(()=>{ this.page++; this.getorderList(完了) },500); } }, getorderList(完了){ this.$http({ メソッド:'post', url:'/seckill/server/orderList', データ:{ jwt:this.jwt、 ステータス:このステータス、 ページ:このページ、 ページサイズ:5 } }).then(res=>{ (res.data.code == 0)の場合{ this.orderList.push.apply(this.orderList、res.data.data.list) を実行します。 this.$refs.myscroller.finishInfinite(true) this.page = res.data.data.page this.all_page = res.data.data.all_page 終わり(); }それ以外{ } }) },
すべて(){ this.status = 'すべて' このページ = 0 this.all_page = 1 this.$refs.myscroller.finishInfinite(false); this.orderList = [] },
vue 無限読み込みインストール npm インストール vue-infinite-loading --save コンポーネント内での使用 // コンポーネントクラスは import InfiniteLoading from 'vue-infinite-loading' を使用します。 エクスポートデフォルト{ コンポーネント: { InfiniteLoading } } //基本バージョンを使用する <infinite-loading スピナー="スパイラル" @infinite="無限ハンドラー" :距離="200" クラス="無限読み込みラップ" > <!-- <div slot="spinner">読み込み中...</div> --> <div slot="no-more">データがありません</div> <div slot="no-results">結果データなし</div> <!-- <div slot="error" slot-scope="{トリガー}"> エラーデータ。再試行するには、<a href="javascript:;" rel="external nofollow" rel="external nofollow" @click="trigger">ここ</a>をクリックしてください。 </div> --> </無限読み込み> 基本的な使い方 <テンプレート> <div> <p v-for="(item,index) リスト内" :key="index"> <span v-text="アイテム"></span> </p> <!-- 無限読み込みコンポーネントは、スクロール ボックス内のリストの下部に配置する必要があります。 --> <無限読み込み スピナー="スパイラル" @infinite="無限ハンドラー" :識別子="無限ID" :距離="200" クラス="無限読み込みラップ" > <div slot="spinner">読み込み中...</div> <div slot="no-more">データがありません</div> <div slot="no-results">結果データなし</div> <div slot="エラー" slot-scope="{トリガー}"> エラーデータ。再試行するには、<a href="javascript:;" rel="external nofollow" rel="external nofollow" @click="trigger">ここ</a>をクリックしてください。 </div> </無限読み込み> </div> </テンプレート> <スクリプト> 'vue-infinite-loading' から InfiniteLoading をインポートします。 エクスポートデフォルト{ データ() { 戻る { infiniteId: +new Date(), // スクロール状態の変更をリセット page: 1, リスト: [] }; }, メソッド: { // スクロール状態をリセットする rest(){ このリスト = []; このページは 1 です。 this.infiniteId += 1; }, 非同期無限ハンドラ($state) { // リクエストデータをシミュレートします。const res = await this.$axios.workList({ page: this.page, pagesize: 20 }); (res.data.list.length) の場合 { このページ += 1; this.list = this.list.concat(res.data.list); $state.loaded(); } それ以外 { $state.complete(); } // ここでは1秒の読み込み遅延をシミュレートします //setTimeout(() => { // temp = [] とします。 // (let i = this.list.length + 1; i <= this.list.length + 20; i++) { // temp.push(i); // } // this.list = this.list.concat(temp); // $state.loaded(); //, 1000); //, }, コンポーネント: { InfiniteLoading } } </スクリプト> ページングの使用 <テンプレート> <div> <ul> <li class="hacker-news-item" v-for="(item, key) in list"></li> </ul> <無限ロード @infinite="infiniteHandler"> データはもうありません </無限読み込み> </div> </テンプレート> <スクリプト> 「vue-infinite-loading」からInfiniteLoadingをインポートします。 「axios」からaxiosをインポートします。 エクスポートデフォルト{ データ() { 戻る { リスト: [], }; }, メソッド: { 無限ハンドラ($state) { let api = "http://xxx.com/xxx"; // api は axios のデータ アドレスを要求します .get(api, { パラメータ: { // ページ番号パラメータ(ページあたり 10 個) ページ: this.list.length / 10 + 1、 }, }) .then((応答) => { if (応答データの長さ) { // response.data はリクエスト インターフェイスによって返される配列リストです。this.list = this.list.concat(response.data); $state.loaded(); (this.list.length / 10 === 10)の場合{ // ここでは 10 ページのデータが読み込まれ、これ以上読み込まれないように設定されています $state.complete(); } } それ以外 { $state.complete(); } }); }, }, コンポーネント: { InfiniteLoading }, }; </スクリプト> 説明: $state: このコンポーネントは、特別なイベント パラメータ $state をイベント ハンドラに渡して、読み込み状態を変更します。$state パラメータには、loaded メソッド、complete メソッド、reset メソッドの 3 つのメソッドが含まれます。
条件付き使用 <テンプレート> <div class="ハッカーニュースリスト"> <div class="ハッカーニュースヘッダー"> <!-- プルダウンして変更 --> <v-model="タグ" @change="changeFilter()">を選択します。 <option value="story">ストーリー</option> <option value="history">履歴</option> </選択> <!--またはクリックして変更--> <button @click="changeFilter()">検索</button> </div> <ul> <li class="hacker-news-item" v-for="(item, key) in list"></li> </ul> <!--ref="infiniteLoading" を設定することを忘れないでください --> <infinite-loading @infinite="infiniteHandler" ref="infiniteLoading"> これ以上のデータはありません </無限読み込み> </div> </テンプレート> <スクリプト> 'vue-infinite-loading' から InfiniteLoading をインポートします。 'axios' から axios をインポートします。 エクスポートデフォルト{ データ() { 戻る { リスト: [], タグ: 'ストーリー', }; }, メソッド: { 無限ハンドラ($state) { 定数api="http://xxx.com/xxx"; //api はデータアドレスを要求します axios.get(api, { パラメータ: { // 変更された条件パラメータタグ: this.tag, ページ: this.list.length / 10 + 1、 }, }).then(({ データ }) => { if (データ結果の長さ) { this.list = this.list.concat(data.result); $state.loaded(); (this.list.length / 20 === 10)の場合{ 状態.complete(); } } それ以外 { $state.complete(); } }); }, //このメソッドを使用して条件バーを変更します changeFilter() { このリスト = []; this.$nextTick(() => { this.$refs.infiniteLoading.$emit('$InfiniteLoading:reset'); }); }, }, コンポーネント: { InfiniteLoading } } </スクリプト> 安定 import { debounce } from "lodash"; // 手ぶれ防止 // 手ぶれ防止 get: debounce(async function () { k = this.$axios.getList_API() を待機します。 console.log(k, "手ぶれ補正バージョン"); }, 1000), これで、Vue がスクロールダウンしてさらにデータを読み込む - scroll - case に関するこの記事は終了です。Vue の読み込みデータに関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Windows での MySQL 8.0.18 インストール チュートリアル (図解)
>>: Flask アプリケーションの Docker デプロイ実装手順
目次1. プロパティを型リストに制限する2. デフォルトのコンテンツと拡張ポイント3. ネストされた...
この記事では、ログインタイプの切り替えを実装するためのVueの具体的なコードを例として紹介します。具...
トリガー:トリガーの使用シナリオと対応するバージョン:トリガーは次の MySQL バージョンで使用で...
目次1. 共有ロックと排他ロック2. 意図ロック3. レコードロック4. ギャップロック5. ネクス...
HTML は、World Wide Web 上で公開するために使用されるハイブリッド言語です。 XH...
この記事の例では、参考のためにvueアップロード画像コンポーネントの具体的なコードを共有しています。...
この記事では、参考までにMySQL 5.7.17圧縮版のインストール手順を紹介します。具体的な内容は...
目次1. 関数とメソッドの違い2. 良い関数の書き方2.1 正確な命名2.1.1 関数の命名2.1....
目次MySQL マスター スレーブ レプリケーション環境を設定する場合、マスター データベースとスレ...
この記事では、動的なパーティクル効果を実現するためのjQueryの具体的なコードを参考までに紹介しま...
stat 関数と stat コマンドLinux ファイル内の [inode = インデックス ノード...
<br />jb51.net では、常に記事のセマンティクスを重視してきましたが、HTM...
序文フェイルオーバーが発生した後、よくある問題は同期エラーです。データベースが小さい場合は、ダンプし...
30 種類の高品質な英語リボン フォントを無料でダウンロードできます。デザイナーは常に、25 種類の...
この記事では、VMware 12でのUbuntu 16.04のインストールチュートリアルを参考までに...