Skip to content
API 风格:

Pagination ページネーション ​

ページ番号ナビゲーション:前へ / ページ番号 / 次へ / 省略記号 / 1 ページあたりの件数切替え / ページジャンプ / 総件数。ページ番号ウィンドウの縮小アルゴリズムは core 層の純関数として実装されており、網羅的な単体テストが可能です。

基本的な使い方 ​

基本的な使い方
vue
<script setup lang="ts">
</script>

<template>
  <LhPagination :total="120" />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhPagination :total="120" />
</template>

総件数と 1 ページあたりの件数切替え ​

総件数と件数切替え
vue
<script setup lang="ts">
</script>

<template>
  <LhPagination :total="480" show-total show-size-changer />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhPagination :total="480" show-total show-size-changer />
</template>

ページジャンプ ​

ページジャンプ
vue
<script setup lang="ts">
</script>

<template>
  <LhPagination :total="480" show-total show-jumper />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhPagination :total="480" show-total show-jumper />
</template>

コンパクトモード ​

コンパクトモード
vue
<script setup lang="ts">
</script>

<template>
  <LhPagination :total="480" simple show-jumper />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhPagination :total="480" simple show-jumper />
</template>

制御用法 ​

制御用法

現在のページ:2

vue
<script setup lang="ts">
import { ref } from 'vue'
const page = ref(2)
const pageSize = ref(20)
</script>

<template>
  <LhPagination v-model:current="page" :total="95" />
</template>
vue
<script>
export default {
  data() {
    return { page: 2, pageSize: 20 }
  },
}
</script>

<template>
  <LhPagination v-model:current="page" :total="95" />
</template>

1 ページあたりの件数と無効化 ​

v-model:page-size で 1 ページあたりの件数を制御し、page-sizes で件数の選択肢をカスタマイズします。disabled でページネーション全体を無効化します。

件数と無効化

1 ページあたりの件数:20

vue
<script setup lang="ts">
import { ref } from 'vue'
const pageSize = ref(20)
</script>

<template>
  <LhPagination
    v-model:page-size="pageSize"
    :total="480"
    show-size-changer
    :page-sizes="[10, 20, 50, 100]"
  />
  <LhPagination :total="480" disabled />
</template>
vue
<script>
export default {
  data() {
    return { pageSize: 20 }
  },
}
</script>

<template>
  <LhPagination
    v-model:page-size="pageSize"
    :total="480"
    show-size-changer
    :page-sizes="[10, 20, 50, 100]"
  />
  <LhPagination :total="480" disabled />
</template>

Pagination API ​

Props ​

プロパティ名説明型デフォルト値
totalデータの総件数(必須)number—
pageSize1 ページあたりの件数number10
current現在のページ(v-model:current)number—
pageSizes1 ページあたりの件数の選択肢number[]() => [10, 20, 30, 40]
showTotal総件数を表示するかbooleanfalse
showSizeChanger1 ページあたりの件数切替えを表示するかbooleanfalse
showJumperページジャンプ入力を表示するかbooleanfalse
simpleコンパクトモードbooleanfalse
disabled無効化するかbooleanfalse
sxsx クイックレイアウトプロパティLhSxProps—

Events ​

イベント名説明コールバック引数
update:current現在のページの変化(v-model)(page: number)
update:pageSize1 ページあたりの件数の変化(v-model:pageSize)(size: number)
changeページ番号の変化(page: number)
size-change1 ページあたりの件数の変化(size: number)

アクセシビリティ ​

  • ルート要素は <nav aria-label="pagination">
  • 現在のページのボタンには自動的に aria-current="page" が設定される
  • 各ページ番号ボタン、前へ / 次へボタンには独立した aria-label が付く(言語パックの pagination.page / prev / next を使用)。記号のみの「‹」「›」は aria-hidden で隠される
  • ページジャンプ入力欄は本物の <label> を持つ(言語パックの pagination.goto を使用)
  • 件数切替えはネイティブ <select> で、aria-label が付く(言語パックの pagination.sizeChangerLabel を使用)
  • 省略記号は表示専用の aria-hidden 要素で、キーボードナビゲーションを妨げない

型定義 ​

本コンポーネントが外部にエクスポートする TypeScript 型構造は以下のとおりです(packages/components/pagination/src/types.ts および @lh-ui/share/core/* ソースから自動抽出。各エントリをクリックすると完全な定義を確認できます。プロパティの説明は上記の Props 表を参照してください):

LhPaginationProps
ts
export interface LhPaginationProps {
  /** データの総件数(必須) */
  total: number
  /** 1 ページあたりの件数 */
  pageSize?: number
  /** 現在のページ(v-model:current) */
  current?: number
  /** 1 ページあたりの件数の選択肢 */
  pageSizes?: number[]
  /** 総件数を表示するか */
  showTotal?: boolean
  /** 1 ページあたりの件数切替えを表示するか */
  showSizeChanger?: boolean
  /** ページジャンプ入力を表示するか */
  showJumper?: boolean
  /** コンパクトモード */
  simple?: boolean
  /** 無効化するか */
  disabled?: boolean
  /** sx クイックレイアウトプロパティ */
  sx?: LhSxProps
}

国風の美で、コードの基を築く