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

推薦する

JSでHTML本文のスタイルを変更する

目次1. 本来の定義2. JS操作、幅の変更を例に3. 効果: 幅が変更されました 1. 本来の定義...

CentOS7 (YUM) での MySQL 5.7 のインストールと設定のチュートリアル

インストール環境: CentOS7 64ビット、MySQL5.7 1. YUMソースを設定するMyS...

MySQL ストアド プロシージャで月ごとにテーブルを作成する方法

詳細には立ち入らずに、コードに直接進みましょう。一緒にコミュニケーションを取り、学びましょう。月ごと...

Vue+Openlayer をベースに geojson を動的に読み込む方法

1つ以上の機能をロードする <テンプレート> <div id="map&...

Tomcat を使用して IntelliJ IDEA によってデプロイされたプロジェクトの場所はどこですか?

IntelliJ IDEA が Tomcat を使用して Javaweb プロジェクトをデプロイし...

Docker実行コンテナが作成状態にある問題についての簡単な説明

最近の問題としては、次のような現象があります。システムには、docker run コマンドを継続的に...

Mysql5.7 で JSON 操作関数を使用する手順

序文JSON は、言語に依存しないテキスト形式を使用する軽量のデータ交換形式で、XML に似ています...

CSS のサイズ単位についての簡単な説明

ブラウザの互換性はどんどん良くなってきています。モバイル端末は基本的にすべてWebKitベースです。...

Docker swarm の簡単なチュートリアル

3つの仮想マシン132、133、134を群がらせる1. クラスターを初期化し、自分自身をクラスターに...

Vue2 における 12 種類のコンポーネント通信

目次1. 小道具2..同期3.vモデル4.参照5. $emit/v-on 6. $attrs/$li...

CSS3を使って歌詞進行テキストカラー塗りつぶし変更の動的効果を実装するアイデアの詳細な説明

音楽を再生すると、曲が進むにつれて歌詞が徐々に色づきます。色は単語ごとに変わるのではなく、左から右へ...

Windows10にMySQL5.6.35データベースを2つインストールする

次のように、Win10 での 2 つの MySQL5.6.35 データベースのインストールを記録しま...

MySQLシリーズのMariaDBサーバーのインストール

目次チュートリアルシリーズ1. yumパッケージマネージャーを使用してMariaDBサーバーをインス...

MySQL 結合バッファの原理

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