Vue3.0 でページング コンポーネントを手動でカプセル化する方法

Vue3.0 でページング コンポーネントを手動でカプセル化する方法

この記事では、vue3.0の手動カプセル化ページングコンポーネントの具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

1. 親コンポーネントの紹介

src/views/goods/components/goods-comment.vue

<!-- page はページングを初期化するときに表示されるデフォルトのページを示します -->
    <XtxPagination @change-page='changePage' :pagesize='reqParams.pageSize' :total='total' :page='1' />
    // '@/api/product.js' からインターフェース import {findCommentListByGoods } を呼び出す
 エクスポートデフォルト{
  設定(){
  // スクリーニング条件の準備 const reqParams = reactive({
      // 現在のページ番号 page: 1,
      //ページあたりのエントリ数pageSize: 10,
      // 写真があるか hasPicture: null,
      // フィルター条件タグ: null、
      // ソートフィールド sortField: null
    })
    // パラメータの変更を監視する watch(reqParams, () => {
   findCommentListByGoods(goods.value.id, reqParams).then(ret => {
        合計値 = 戻り値の数
        リストの値 = ret.result.items
      })
    }, {
      即時: 真
    })
    // ページ番号の変更を制御する const changePage = (page) => {
      // ページングパラメータを変更し、インターフェースを再度呼び出します reqParams.page = page
    }
    
  }
 }

2. サブコンポーネント

src/コンポーネント/ライブラリ/xtx-pagination.vue

<テンプレート>
  <div class="xtx-pagination">
    <a @click='changePage(false)' href="javascript:;" :class="{disabled: currentPage===1}">前のページ</a>
    <span v-if='currentPage > 3'>...</span>
    <a @click='changePage(item)' href="javascript:;" :class='{active: currentPage===item}' v-for='リスト内のアイテム' :key='item'>{{item}}</a>
    <span v-if='currentPage < pages - 2'>...</span>
    <a @click='changePage(true)' href="javascript:;" :class='{disabled: currentPage===pages}'>次のページ</a>
  </div>
</テンプレート>
<スクリプト>
'vue' から { computed, ref } をインポートします。

エクスポートデフォルト{
  名前: 'XtxPagination'、
  小道具: {
    合計:
      タイプ: 数値、
      デフォルト: 80
    },
    ページサイズ: {
      タイプ: 数値、
      デフォルト: 10
    }
    //デフォルトの初期ページ番号// page: {
    // 型: 数値、
    // デフォルト: 1
    // }
  },
  セットアップ (props, { 出力, attrs }) {
    // attrs は親コンポーネントから渡された属性を表しますが、props は属性を受け取らないため、応答しません // ​​中間ページ番号情報を動的に計算します // ページあたりの項目数 // const pagesize = 8
    // ページの総数 let pages = Math.ceil(props.total / props.pagesize)
    //現在のページ番号// console.log(attrs.page)
    const currentPage = ref(attrs.page || 1)
    // ページ番号リストを動的に計算する const list = computed(() => {
      // 親コンポーネントから渡された合計値が変わると、計算プロパティは再計算されます pages = Math.ceil(props.total / props.pagesize)
      定数結果 = []
      // 合計ページ数は 5 以下、5 より大きい
      ページ数 <= 5 の場合
        // 合計ページ数は 5 以下です for (let i = 1; i <= pages; i++) {
          結果.push(i)
        }
      } それ以外 {
        // 合計ページ数が 5 より大きい
        (現在のページの値 <= 2) の場合 {
          // 左臨界値 for (let i = 1; i <= 5; i++) {
            結果.push(i)
          }
        } そうでない場合 (currentPage.value >= pages - 1) {
          // 右臨界値 for (let i = pages - 4; i <= pages; i++) {
            結果.push(i)
          }
        } それ以外 {
          // 中間状態 for (let i = currentPage.value - 2; i <= currentPage.value + 2; i++) {
            結果.push(i)
          }
        }
      }
      結果を返す
    })
    // 前のページと次のページの変更を制御する const changePage = (type) => {
      (型 === false)の場合{
        // 前のページ // 最初のページの場合はクリック操作は禁止 if (currentPage.value === 1) return
        (現在のページの値 > 1) の場合 {
          現在のページの値 -= 1
        }
      } そうでない場合 (type === true) {
        // 次のページ // 最後のページの場合、クリック操作は禁止されます if (currentPage.value === pages) return
        (currentPage.value < ページ) の場合 {
          現在のページの値 += 1
        }
      } それ以外 {
        // ページをクリック currentPage.value = type
      }
      出力('change-page', currentPage.value)
    }
    { リスト、現在のページ、ページ、変更ページ } を返します。
  }
}
</スクリプト>
<style スコープ lang="less">
.xtxページネーション{
  ディスプレイ: フレックス;
  コンテンツの中央揃え: 中央;
  パディング: 30px;
  > {
    表示: インラインブロック;
    パディング: 5px 10px;
    境界線: 1px 実線 #e4e4e4;
    境界線の半径: 4px;
    右マージン: 10px;
    &:ホバー{
      色: @xtxColor;
    }
    &。アクティブ {
      背景: @xtxColor;
      色: #fff;
      境界線の色: @xtxColor;
    }
    &。無効 {
      カーソル: 許可されていません。
      不透明度: 0.4;
      &:ホバー{
        色: #333;
      }
    }
  }
  > スパン {
    右マージン: 10px;
  }
}
</スタイル>

知識ポイント: attrs は親コンポーネントから渡された属性を表しますが、props は属性を受け取らないため、応答性がありません (vue3 の新機能)

3. 成果を達成する

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

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

<<:  MySQLデータ内の多数の改行と復帰に対する解決策

>>:  Raspberry Pi 3B+ に 64 ビット Ubuntu システムと Docker ツールをインストールする詳細な手順

推薦する

Windows プラットフォームでの MySQL のインストールと設定方法と注意事項

2.1、msiインストールパッケージ2.1.1、インストール特に重要なのは、インストール前に、元の ...

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

MySQL_8.0.2のオフラインインストール方法は参考までに。具体的な内容は以下のとおりです。次の...

MYSQL ログとバックアップおよび復元の問題の詳細な説明

この記事では、参考までにMYSQLログとバックアップとリストアについて紹介します。具体的な内容は以下...

MySqlのインストールとアンインストールに関する詳細なチュートリアル

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

HTML チュートリアル、簡単に学べる HTML 言語 (2)

*******************HTML言語入門(パート2)*****************...

HTML(CSSスタイル仕様)を読む必要があります

CSS スタイル仕様1. クラスセレクター2. タグセレクター3. IDセレクター4. CSSスタイ...

Win Server 2019 サーバーの IIS 構成と Web サイトの簡単な公開

1.まずサーバーにリモート接続する2. サーバーマネージャーを開く 3役割と機能の追加 4サーバープ...

レンダリング関数と JSX の詳細

目次1. 基本2. ノード、ツリー、仮想DOM 1. 仮想DOM 3. createElementパ...

Vueのリストレンダリングの詳細な説明

目次1. v-for: 配列の内容を走査する(よく使われる) 2. v-for: オブジェクトのプロ...

Docker Swarm 外部検証ロードバランシングが機能しない場合の解決策

問題の説明Centos7 をローカルにインストールして 3 つの仮想マシンを作成し、Swarm クラ...

ReactのEffectListの簡単な分析

目次EffectList コレクション最初のレンダリング時のEffectList EffectLis...

Windows10にmysql5.7.18をインストールするチュートリアル

このチュートリアルでは、MySQL 5.7.18のインストールと設定方法を参考までに紹介します。具体...

Web ページのスクロール バーが右側に設定されているのはなぜですか?

私たちが毎日使っているブラウザや Word 文書のスクロール バーはなぜ右側にあるのでしょうか。多く...

Angular CDK を使用してサービスポップアップトーストコンポーネント機能を実装する

目次1. 環境設備2. ToastコンポーネントとToastServiceを作成する2.1 Toas...

新しく作成された MySQL ユーザーの % には localhost が含まれていますか?

通常の説明%はどのクライアントでも接続できることを意味しますlocalhostはローカルコンピュータ...