Vue3は独自のページングコンポーネントをカプセル化します

Vue3は独自のページングコンポーネントをカプセル化します

この記事の例では、vue3 が独自のページングコンポーネントをカプセル化する具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

背景

リスト型データを閲覧する場合、データ量が多く、一度にすべてを要求すると、パフォーマンスの低下や読み込み遅延が発生する可能性があります。この場合、ページング コンポーネントが重要な役割を果たします。ページ スペースをあまり占有せずに、データの一部のみを要求できます。他のデータを表示する場合は、ページ番号を変更して要求を開始し、ページ データを更新できます。

ページングコンポーネントをカプセル化します

コンポーネントの必須パラメータ

  • total属性:データの合計数を渡すために使用します
  • ページサイズ属性:ページあたりに表示されるデータ項目の数
  • currentPage プロパティ:現在のデフォルトのページ番号
  • ページ変更イベント: ページ番号が変更されたときにトリガーされるイベント。パラメータは現在のページ番号です。

コンポーネントランディングコード my-pagination.vue

<テンプレート>
  <div class="my-pagination">
    <a href="javascript:;" :class="{ disabled: currentPage === 1 }" @click="changePage(false)">前のページ</a>
    <span v-if="currentPage > 3">...</span>
    <a
      href="javascript:;" 
      v-for="リスト内の項目"
      :key="アイテム"
      :class="{ アクティブ: currentPage === 項目 }"
      @click="ページ変更(アイテム)"
      >{{ アイテム }}</a
    >
    <span v-if="currentPage < pages - 2">...</span>
    <a href="javascript:;" :class="{ disabled: currentPage === pages }" @click="changePage(true)">次のページ</a>
  </div>
</テンプレート>
<スクリプト>
'vue-demi' から { computed, ref } をインポートします。
エクスポートデフォルト{
  名前: 'MyPagination'、
  小道具: {
    合計:
      タイプ: 数値、
      デフォルト: 80
    },
    ページサイズ: {
      タイプ: 数値、
      デフォルト: 10
    }
  },
  セットアップ(props, { 出力, attrs }) {
    // 現在のページ const currentPage = ref(attrs.currentPage)
    // ページの総数を計算する const pages = computed(() => Math.ceil(props.total / props.pagesize))
    // ページ番号表示の組み合わせ const list = computed(() => {
      定数結果 = []
      // 総ページ数が5ページ以下の場合 if (pages <= 5) {
        (i = 1 とします; i <= pages; i++) {
          結果.push(i)
        }
      } それ以外 {
        // 合計ページ数が 5 ページを超える場合 // 両端の省略記号の有無を制御し、表示されるページ番号の数は選択したページ番号の中央に配置されます if (currentPage.value <= 2) {
          (i = 1; i <= 5; i++ とします) {
            結果.push(i)
          }
        } そうでない場合 (currentPage.value >= 3 && currentPage.value <= pages.value - 2) {
          (i = currentPage.value - 2; i <= currentPage.value + 2; i++) の場合 {
            結果.push(i)
          }
        } そうでない場合 (currentPage.value > pages.value - 2) {
          (i = pages.value - 4; i <= pages.value; i++) の場合 {
            結果.push(i)
          }
        }
      }
      結果を返す
    })
    // ページ番号を変更するには前のページをクリックします const changePage = type => {
      // 前のページボタンをクリック if (type === false) {
        (currentPage.value <= 1)の場合、戻り値
        現在のページの値 -= 1
      } そうでない場合 (type === true) {
        // 次のページボタンをクリックします if (currentPage.value >= pages.value) return
        現在のページの値 += 1
      } それ以外 {
        // ページをクリック currentPage.value = type
      }
      // 現在のページ番号を親コンポーネントに渡し、このイベントで関連する操作を実行します。emit('change-page', currentPage.value)
    }
    {currentPage、pages、list、changePage} を返します。
  }
}
</スクリプト>
<style スコープ lang="less">
.my-ページネーション{
  ディスプレイ: フレックス;
  コンテンツの中央揃え: 中央;
  パディング: 30px;
  > {
    表示: インラインブロック;
    パディング: 5px 10px;
    境界線: 1px 実線 #e4e4e4;
    境界線の半径: 4px;
    右マージン: 10px;
    &:ホバー{
      色: @xtxColor;
    }
    &。アクティブ {
      背景: @xtxColor;
      色: #fff;
      境界線の色: @xtxColor;
    }
    &。無効 {
      カーソル: 許可されていません。
      不透明度: 0.4;
      &:ホバー{
        色: #333;
      }
    }
  }
  > スパン {
    右マージン: 10px;
  }
}
</スタイル>

コンポーネントの使用

<Xtxページネーション 
:total="合計" 
:pagesize="reqParams.pagesize" 
:現在のページ="1" 
@change-page="ページ変更" />

効果

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue.js ベースのテーブル ページング コンポーネント
  • Vue ベースのページング コンポーネントをカプセル化する方法
  • Vue ページング コンポーネント テーブル ページバーの使用例の分析
  • Vueはページングコンポーネントを実装します
  • Vue.js はカスタムページングコンポーネント vue-paginaiton を実装します
  • vue.js を使用してページング コンポーネントを作成する
  • 要素 UI ページング コンポーネントのカプセル化に基づく Vue サンプル コード
  • Vue グローバル ページング コンポーネントの実装コード
  • vue2 ベースのテーブルページングコンポーネントの実装方法
  • Vue ベースのスワイプ ページング コンポーネントの実装例

<<:  ServerSocketのデフォルトIPバインディングの実装プロセスの詳細な説明

>>:  MySQLでJSONフィールドを操作する方法

推薦する

Docker を使用した Redis マスタースレーブレプリケーションの実践の詳細説明

目次1. 背景2. 操作手順3. Dockerをインストールする4. 主なサービス構成5. サービス...

MySQL 結合バッファの原理

目次1. MySQL 結合バッファ2. JoinBufferCacheストレージスペースの割り当て3...

Linux でリモート MySQL データベースを手動で展開する方法の詳細な説明

1. mysql をインストールします。次のコマンドを実行して、YUM ソースを更新します。 rpm...

Vueプロジェクトでvuexを使用する方法

目次Vuex とは何ですか? Vuex 使用サイクル図私のストアディレクトリvuexの例の実装要約す...

MySQL で遅い SQL 文を見つける方法

MySQL で遅い SQL ステートメントを見つけるにはどうすればよいでしょうか?これは、多くの人を...

HTMLの基礎を徹底解説(第1部)

1. WEBを理解するWeb ページは主にテキスト、画像、ハイパーリンクなどの要素で構成されていま...

Nginxを使ってサーバー内で複数コンテナの共存を実現する方法

背景Tencent Linux クラウド ホストがあり、その上に Docker (ServiceDo...

MySQL は information_schema オブジェクトの付与をバイパスし、ERROR 1044 (4200) エラーを報告します

この質問は、MySQL の権限に関する WeChat グループのネットユーザー間の議論です。次のよう...

Vueはマーキースタイルのテキストの水平スクロールを実装します

この記事では、マーキースタイルのテキストの水平スクロールを実現するためのVueの具体的なコードを参考...

HTML の POST リクエストにおける a タグの 2 つの使用法の分析

HTML POST リクエストで a タグを使用する 2 つの例を次に示します。 1. ajaxを使...

MySQLでルートユーザーのパスワードを変更する方法

方法1: SET PASSWORDコマンドを使用する mysql> username@loca...

Apache ab同時負荷ストレステストの実装方法

腹筋コマンドの原則Apache の ab コマンドは、マルチスレッドの同時リクエストをシミュレートし...

js でオブジェクトを作成するさまざまな方法とその長所と短所のまとめ

目次初期作成方法ファクトリーパターンコンストラクターパターンコンストラクタパターンの最適化プロトタイ...

Docker+Selenium Grid に基づく技術アプリケーションをテストするためのサンプル コード

Selenium Grid の紹介Selenium Grid のいくつかの新しい機能は、今後リリース...

MySQLクエリキャッシュに関するヒント

目次序文QueryCache の概要クエリキャッシュ構成QueryCache の使用queryCac...