この記事では、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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: Raspberry Pi 3B+ に 64 ビット Ubuntu システムと Docker ツールをインストールする詳細な手順
閉鎖サービス nginx 停止systemctl 停止 nginx起動するサービス nginx 開始...
導入された HTML タグは、必ずしも XHTML 仕様に完全に準拠しているわけではありません。実際...
この記事の冒頭で、以前書いた入門記事の間違いを訂正したいと思います。初心者を再び誤解させないように、...
導入振り返ってみると、4年前、私がMySQLのインデックスについて学んでいたとき、先生はインデックス...
目次背景複合インデックスを理解する左端一致原則フィールド順序の影響複合インデックスは単一のインデック...
この記事では、ショッピングカートを実装するためのVue.jsフレームワークの具体的なコードを参考まで...
目次序文1. 概要2. 読み取りと書き込みの分離3. MySQL マスタースレーブレプリケーションの...
目次最適化の第一歩: 軽量ベースイメージの使用第2段階の最適化:多段階構築Docker は、ソフトウ...
この記事では、スライド選択効果を実現するピッカーをシミュレートするjQueryの具体的なコードを参考...
要素にクラスを追加/削除することは、プロジェクト開発では非常に一般的な動作です。たとえば、Web サ...
目次序文デモンストレーション効果HTMLコードCSSコードJavascriptコードデモアドレス序文...
任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...
今日、仕事中に、一時的に追加した友人から、Web ページを使用して訪問者の QQ を取得する方法を尋...
この記事では主に、echart を使用してパーセンテージを表示する Vue の円グラフデータ部分を紹...
目次1. $(".box1").click() メソッドを実装する2. $(&q...