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

推薦する

MySQLのスローログの開き方と保存形式の詳細な分析

開発プロジェクトでは、MySQL のスロークエリログを通じて効率の問題のある SQL を監視できます...

体験をデザインする: ボタンには何があるか

<br />最近、UCDChina は「インターフェース上のテキストに注意を払う」という...

Docker用国産イメージウェアハウスの使い方

1. 問題の説明何らかの理由により、中国でのDockerイメージのダウンロード速度は特に遅くなります...

JavaScriptでよく使われる配列重複排除実戦ソースコード

アレイの重複排除は、通常、就職面接中に遭遇し、アレイの重複排除方法のコードを手動で記述することが求め...

HTML/CSS の基礎 - HTML コード記述におけるいくつかの注意事項 (必読)

この記事の警告事項は、ブラウザの互換性とはまったく関係ありません。主に、プロジェクトで遭遇したいくつ...

MySQL で重複レコードを見つけて削除する方法

みなさんこんにちは。私は技術の話ばかりして髪を切らない先生のトニーです。何らかの歴史的な理由や誤操作...

Vue イベントの $event パラメータ = イベント値の場合

テンプレート <el-table :data="データリスト"> &...

MySQL 8.0.12 簡単インストールチュートリアル

この記事では、MySQL 8.0.12のインストールチュートリアルを参考までに紹介します。具体的な内...

MySQL フルテキスト インデックス、ジョイント インデックス、Like クエリ、JSON クエリのうち、どれが高速ですか?

目次クエリの背景1. クエリをいいね2. JSON関数クエリ3. 共同インデックスクエリ4. 全文イ...

ウェブサイトをより高く、よりデザイン的に見せる方法

「ウェブサイトを高級感のあるものにするにはどうすればいいでしょうか? それともデザイン重視にすればい...

アイデアを通じてプロジェクトをDockerにパッケージ化する方法

多くの友人が、Docker でプロジェクトを実行する方法をずっと知りたがっていました。今日は、自分の...

MySQLログシステムの詳細情報共有

大規模なシステムに取り組んだことがある人なら誰でも、ログの役割を過小評価してはならないことを知ってい...

Dockerネットワーク作成に--subnetを追加した後の問題を解決する

Docker ネットワークの作成に –subnet を追加した後、docker network ls...

シンプルなページング効果を実現するjQuery+Ajax

この記事では、ページング効果を実現するためのjquery+Ajaxの具体的なコードを参考までに紹介し...

CentOS 7のインストールと設定方法のグラフィックチュートリアル

この記事は、CentOS 7の詳細なインストールチュートリアルを参考のために記録します。具体的な内容...