Skip to content

Pagination ページネーション - Vant 4

📄 Pagination ページネーション

🎯 紹介

Pagination コンポーネントはデータ量が多すぎる場合に使用し、ページング形式でデータを分割し、一度に一つのページのみをロードします。大量のデータをより明確かつ秩序正しく表示します!

📦 導入

以下の方法でグローバルにコンポーネントを登録します。詳細な登録方法についてはコンポーネントの登録を参照してください。

js
import { createApp } from 'vue';
import { Pagination } from 'vant';

const app = createApp();
app.use(Pagination);

🎯 コード例

🔧 基本的な使い方

v-model を使用して現在のページ番号をバインドします。素晴らしい本をページをめくるようなものです 📖

html
<template>
  <div class="demo-pagination">
    <van-pagination 
      v-model="currentPage" 
      :total-items="24" 
      :items-per-page="5" 
      @change="onPageChange"
    />
    <p class="current-info">現在のページ:{{ currentPage }}</p>
  </div>
</template>

<script>
import { ref } from 'vue';
import { showToast } from 'vant';

export default {
  setup() {
    const currentPage = ref(1);
    
    const onPageChange = (page) => {
      showToast(`${page}ページに移動します`);
    };
    
    return { 
      currentPage,
      onPageChange
    };
  },
};
</script>

<style>
.demo-pagination {
  padding: 20px;
}
.current-info {
  margin-top: 10px;
  text-align: center;
  color: #666;
}
</style>

🎨 シンプルモード

modesimple に設定するとシンプルモードに切り替わります。このモードでは、ページネーションに具体的なページ番号ボタンは表示されません。シンプルなナビゲーションコンパスのようなものです 🧭

html
<template>
  <div class="demo-simple">
    <van-pagination 
      v-model="currentPage" 
      mode="simple" 
      :page-count="12"
      @change="onSimpleChange"
    />
    <p class="page-info">シンプルモード:{{ currentPage }}/12</p>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const currentPage = ref(1);
    
    const onSimpleChange = (page) => {
      console.log(`シンプルモードで${page}ページに切り替わりました`);
    };
    
    return { 
      currentPage,
      onSimpleChange
    };
  },
};
</script>

<style>
.demo-simple {
  padding: 20px;
}
.page-info {
  margin-top: 10px;
  text-align: center;
  font-weight: bold;
}
</style>

省略記号を表示

force-ellipses を設定すると省略記号ボタンが表示され、クリックすると素早く移動できます。ページネーションにテレポートを装備したようなものです ⚡

html
<template>
  <div class="demo-ellipses">
    <van-pagination 
      v-model="currentPage" 
      :total-items="125" 
      :show-page-size="5" 
      force-ellipses
      @change="onEllipsesChange"
    />
    <p class="ellipses-info">省略記号モード、合計 {{ Math.ceil(125/10) }} ページ</p>
  </div>
</template>

<script>
import { ref } from 'vue';
import { showToast } from 'vant';

export default {
  setup() {
    const currentPage = ref(1);
    
    const onEllipsesChange = (page) => {
      showToast(`${page}ページに素早く移動します 🚀`);
    };
    
    return { 
      currentPage,
      onEllipsesChange
    };
  },
};
</script>

<style>
.demo-ellipses {
  padding: 20px;
}
.ellipses-info {
  margin-top: 10px;
  text-align: center;
  color: #1989fa;
}
</style>

ボタンのカスタマイズ

prev-textnext-text などのスロットを使用してページネーションボタンの内容をカスタマイズし、ページネーションに独自の個性を与えます ✨

html
<template>
  <div class="demo-custom">
    <van-pagination 
      v-model="currentPage" 
      :total-items="50" 
      :show-page-size="5"
      @change="onCustomChange"
    >
      <template #prev-text>
        <van-icon name="arrow-left" /> 前のページ
      </template>
      <template #next-text>
        次のページ <van-icon name="arrow" />
      </template>
      <template #page="{ number, text, active }">
        <span :class="{ 'custom-page': true, 'active': active }">
          {{ text }}
        </span>
      </template>
    </van-pagination>
    <p class="custom-info">カスタムスタイルのページネーション</p>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const currentPage = ref(1);
    
    const onCustomChange = (page) => {
      console.log(`カスタムページネーションで${page}ページに切り替わりました`);
    };
    
    return { 
      currentPage,
      onCustomChange
    };
  },
};
</script>

<style>
.demo-custom {
  padding: 20px;
}
.custom-page {
  padding: 8px 12px;
  border-radius: 4px;
  transition: all 0.3s;
}
.custom-page.active {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: white;
}
.custom-info {
  margin-top: 10px;
  text-align: center;
  font-style: italic;
}
</style>

API

プロパティ

パラメータ説明デフォルト値
v-model現在のページ番号、ページネーションの現在位置を制御 📍number-
mode表示モード、simple を選択可能、ページネーションの表示スタイルを切り替え 🎨stringmulti
prev-text前のページボタンのテキスト、前方へのナビゲーションテキストをカスタマイズ ⬅️string上一页
next-text次のページボタンのテキスト、後方へのナビゲーションテキストをカスタマイズ ➡️string下一页
page-count総ページ数、ページネーションの総ページ数を定義 📊number | stringページ数に応じて計算
total-items総レコード数、データの総アイテム数 📋number | string0
items-per-page1ページあたりのレコード数、1ページに表示するデータ数を制御 📄number | string10
show-page-size表示するページ番号の数、表示可能なページボタンの数を制御 🔢number | string5
force-ellipses省略記号を表示するかどうか、クイックナビゲーション機能を有効にする ⚡booleanfalse
show-prev-button v4.2.1前のページボタンを表示するかどうか、前方ナビゲーションボタンの表示を制御 👈booleantrue
show-next-button v4.2.1次のページボタンを表示するかどうか、後方ナビゲーションボタンの表示を制御 👉booleantrue

イベント

イベント名説明コールバック引数
changeページ番号が変更されたときにトリガー、ユーザーのページング操作を監視 🔄page: number

スロット

名前説明パラメータ
pageページ番号のカスタマイズ、個性化されたページボタンを作成 🎯{ number: number, text: string, active: boolean }
prev-text前のページボタンのテキストをカスタマイズ、個性化された前方ナビゲーション ⬅️-
next-text次のページボタンのテキストをカスタマイズ、個性化された後方ナビゲーション ➡️-

型定義

コンポーネントは以下の型定義をエクスポートします:

ts
import type { PaginationMode, PaginationProps } from 'vant';

テーマカスタマイズ

スタイル変数

コンポーネントは以下の CSS 変数を提供しており、カスタムスタイルに使用できます。使用方法については ConfigProvider コンポーネント を参照してください。

名前デフォルト値説明
--van-pagination-height40pxページネーションの高さ 📏
--van-pagination-font-sizevar(--van-font-size-md)フォントサイズ ✏️
--van-pagination-item-width36pxページ番号ボタンの幅 📐
--van-pagination-item-default-colorvar(--van-primary-color)デフォルトのページ番号の色 🎨
--van-pagination-item-disabled-colorvar(--van-gray-7)無効状態の色 🚫
--van-pagination-item-disabled-backgroundvar(--van-background)無効状態の背景色 🔒
--van-pagination-backgroundvar(--van-background-2)ページネーションの背景色 🖼️
--van-pagination-desc-colorvar(--van-gray-7)説明文の色 📝
--van-pagination-disabled-opacityvar(--van-disabled-opacity)無効状態の透明度 👻

📚 関連文書

Vant に基づく企業向けモバイルソリューション