この記事の例では、vue3 が独自のページングコンポーネントをカプセル化する具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。 背景リスト型データを閲覧する場合、データ量が多く、一度にすべてを要求すると、パフォーマンスの低下や読み込み遅延が発生する可能性があります。この場合、ページング コンポーネントが重要な役割を果たします。ページ スペースをあまり占有せずに、データの一部のみを要求できます。他のデータを表示する場合は、ページ番号を変更して要求を開始し、ページ データを更新できます。 ページングコンポーネントをカプセル化します コンポーネントの必須パラメータ
コンポーネントランディングコード 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: ServerSocketのデフォルトIPバインディングの実装プロセスの詳細な説明
目次1. 本来の定義2. JS操作、幅の変更を例に3. 効果: 幅が変更されました 1. 本来の定義...
インストール環境: CentOS7 64ビット、MySQL5.7 1. YUMソースを設定するMyS...
詳細には立ち入らずに、コードに直接進みましょう。一緒にコミュニケーションを取り、学びましょう。月ごと...
1つ以上の機能をロードする <テンプレート> <div id="map&...
<br />英語アドレス: http://developer.yahoo.com/per...
IntelliJ IDEA が Tomcat を使用して Javaweb プロジェクトをデプロイし...
最近の問題としては、次のような現象があります。システムには、docker run コマンドを継続的に...
序文JSON は、言語に依存しないテキスト形式を使用する軽量のデータ交換形式で、XML に似ています...
ブラウザの互換性はどんどん良くなってきています。モバイル端末は基本的にすべてWebKitベースです。...
3つの仮想マシン132、133、134を群がらせる1. クラスターを初期化し、自分自身をクラスターに...
目次1. 小道具2..同期3.vモデル4.参照5. $emit/v-on 6. $attrs/$li...
音楽を再生すると、曲が進むにつれて歌詞が徐々に色づきます。色は単語ごとに変わるのではなく、左から右へ...
次のように、Win10 での 2 つの MySQL5.6.35 データベースのインストールを記録しま...
目次チュートリアルシリーズ1. yumパッケージマネージャーを使用してMariaDBサーバーをインス...
目次1. MySQL 結合バッファ2. JoinBufferCacheストレージスペースの割り当て3...