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フィールドを操作する方法

推薦する

WebページのレイアウトではIE6の互換性の問題を考慮する必要があります

下の図は、当社のウェブサイト統計システムの訪問者詳細におけるブラウザ閲覧率を示しており、IE6 が ...

mysqlを完全にアンインストールします。個人テストです!

MySQL をクリーンアンインストールします。個人的にテストしたところ、今回はようやくうまくいきま...

Linux 上での MySQL データベースのリモート展開の詳細な手順

LinuxリモートMySQLデータベースの展開、参考までに、具体的な内容は次のとおりです。 1.0 ...

JS で単一ファイルコンポーネントを実装する方法

目次概要単一ファイルコンポーネント基本概念シンプルなローダーコンポーネントコンテンツの解析コンポーネ...

Linux で rpm パッケージを見つけるために CD をマウントする方法

前面に書かれたLinux を使用する際にソフトウェアをインストールする必要がある場合があります。もち...

DockerにTomcatコンテナを追加したときにホームページにアクセスできない問題の解決方法

質問docker run コマンドを使用して、tomcat コンテナが正常に追加されました。ポートも...

標準的なHTMLの書き方は、Dreamweaverによって自動的に生成されるものとは異なります。

コードをコピーコードは次のとおりです。 <!--doctype はドキュメント タイプ htm...

Linux でのプロセスデーモン スーパーバイザーのインストール、構成、および使用

Supervisor は非常に優れたデーモン管理ツールです。自動起動、ログ出力、自動ログカットなど、...

Chrome、Firefox、IEで入力カーソルの位置がずれる問題の解決方法

ブラウザで入力カーソルがずれる問題の詳しい説明<br />仕事で問題に遭遇し、解決策を探...

Reactの3つの主要属性におけるpropsの使用の詳細な説明

目次クラスコンポーネント機能コンポーネントプロパティは読み取り専用ですコンポーネント間通信前回は状態...

VMwareがwin10ホームバージョンに64ビットオペレーティングシステムをインストールできない問題を解決します

問題の説明VMware Workstationが新しい仮想マシンを作成し、64ビットオペレーティング...

Docker での Tomcat インストールの 404 問題の解決方法

tomcat の containerID を見つけて、tomacat ディレクトリに入ります。 [r...

Ubuntu 16.04 64 ビット版の VMware Tools のインストールと構成のグラフィック チュートリアル

この記事では、VMware Toolsのインストールと構成に関するグラフィックチュートリアルを参考と...

Vueはシンプルなマーキー効果を実装します

この記事では、Vueの具体的なコードを共有して、シンプルなマーキー効果を実現しています。具体的な内容...