概要
<b-pagination-nav>
は、ナビゲーションページネーションを提供するカスタム入力コンポーネントです。number-of-pages
プロパティでページの総数を設定します。ページ番号は1からnumber-of-pages
までインデックス付けされます。
b-pagination-nav
は、現在のページのURL($route
検出または、$router
が検出されない場合はブラウザの場所URL)に基づいて、どのページリンクがアクティブなページボタンであるかを自動検出しようとします。
**注記:** <b-pagination-nav>
は、新しいページURLへのナビゲーションに使用されます。ページ内コンポーネントのページネーション(テーブルやリストのページネーションなど)を制御するには、代わりに<b-pagination>
コンポーネントを使用してください。
<template>
<div class="overflow-auto">
<b-pagination-nav :link-gen="linkGen" :number-of-pages="10" use-router></b-pagination-nav>
</div>
</template>
<script>
export default {
methods: {
linkGen(pageNum) {
return pageNum === 1 ? '?' : `?page=${pageNum}`
}
}
}
</script>
ページリンクと番号の生成
デフォルトでは、<b-pagination-nav>
はプレーンなリンクタグを生成し、HREF属性にbase-url
とページ番号を連結したものを設定します。base-url
プロパティはデフォルトで'/'です。ページ数はnumber-of-pages
プロパティで指定します。ページ番号は1
からnumber-of-pages
までです。
ルーターリンク
ページリンクを<router link>
コンポーネント(または<nuxt-link>
(Nuxt.jsが検出された場合))として生成するには、use-router
プロパティを設定します。HREFは、ルーターリンクのto
プロパティになります。または、オプションで、ルーターリンクto
位置オブジェクトを返すリンクジェネレーター関数を使用します。
アプリケーションで$router
が検出されない場合、<b-pagination-nav>
は通常の<a>
要素にフォールバックし、to
位置オブジェクトは(可能な場合)標準のURLに変換されます。
次のルーターリンク固有のプロパティがサポートされています。
active-class
exact
exact-active-class
prefetch
(<nuxt-link>
固有のプロパティ) no-prefetch
(<nuxt-link>
固有のプロパティ)
上記のプロパティの詳細については、ルーターリンクサポートのリファレンスセクションを参照してください。
リンクジェネレーター関数
生成されたリンクURLまたは<router-link>
のto
プロパティをより細かく制御する必要がある場合は、link-gen
プロパティを、2つの引数(ページ番号、およびlink
とpage
の2つのフィールドを含むオブジェクト)を受け取る関数参照に設定できます。page
はページ番号で、link
は内部的に生成されたリンクです。
link-gen
関数は、文字列(HREF用)またはルーターのto
オブジェクトを返す必要があります。戻り値がオブジェクトの場合、ルーターリンクは常に生成されます($router
が検出された場合)。戻り値が文字列の場合、use-router
プロパティが設定されていない限り、デフォルトで標準リンクが生成されます。to
位置オブジェクトが使用される場合、base-url
プロパティは効果がありません。
export default {
methods: {
linkGen(pageNum) {
return `/foo/page/${pageNum}`
},
linkGen(pageNum) {
return { path: `/foo/page/${pageNum}` }
},
linkGen(pageNum) {
return {
path: '/foo/',
query: { page: pageNum }
}
},
linkGen(pageNum) {
return {
name: 'posts',
params: { post: pageNum }
}
}
}
}
**注記:** to
位置オブジェクトから標準リンクへのフォールバック時($router
が使用できない場合)、URLの生成には次の位置プロパティのみが使用されます。
path
(指定されていない場合、ページの現在のURLパスがデフォルトになります) query
hash
(使用する場合、先頭の#
を含める必要があります)
name
ルートとparams
の変換はサポートされていません。
ページ番号の生成
デフォルトでは、<b-pagination-nav>
はページリンクボタンにページ番号(1~N)を表示します。この動作をオーバーライドするには、page-gen
プロパティに関数参照を提供します。関数参照は、ページ番号(1~N)を1つの引数として受け入れる必要があります。page-gen
関数は文字列を返す必要があります。
**注記:** 生成されたページ番号文字列内のHTMLコンテンツは**サポートされていません**。基本的なHTMLの場合は、より詳細なフォーマットのためにスコープ付きスロットpage
を使用できます。
例:リンクの配列を使用してページネーションを生成する
<template>
<div class="overflow-auto">
<b-pagination-nav
:link-gen="linkGen"
:page-gen="pageGen"
:number-of-pages="links.length"
></b-pagination-nav>
</div>
</template>
<script>
export default {
data() {
return {
links: ['#foo', '#bar', '#baz', '#faz']
}
},
methods: {
linkGen(pageNum) {
return this.links[pageNum - 1]
},
pageGen(pageNum) {
return this.links[pageNum - 1].slice(1)
}
}
}
</script>
ページの配列を提供する
ページリンクを自動生成するためにnumber-of-pages
を使用する代わりに、pages
プロパティを介してリンクの配列を渡すことができます。pages
プロパティの配列の長さが1
以上の場合、ページリンクの生成に使用されます。
配列は2つの形式のいずれかです。
- 各エントリがリンクである文字列の配列。このモードでは、ページボタンの番号は配列のエントリ数に従って
1
から自動的に設定されます。 - オブジェクトの配列。各オブジェクトには
link
(必須)とtext
(オプション)の2つのフィールドがあります。Linkはリンクを指定する文字列、またはto
位置オブジェクトのいずれかになります。text
はページリンクボタンの内容になります。text
が省略された場合、ページボタンの内容はページ番号がデフォルトになります。
文字列リンクが提供された場合、use-router
プロパティが設定されていない限り、<b-pagination-nav>
は通常の<a>
要素を使用します。(オブジェクト配列形式の)linkがto
位置オブジェクトの場合、ルーターリンクは自動的に生成されます($router
が検出された場合)。
配列形式では、リンク文字列(および/または位置オブジェクト)はそのまま使用され、base-url
プロパティは無視されます。
<template>
<b-pagination-nav :pages="pages1" use-router></b-pagination-nav>
<b-pagination-nav :pages="pages2" use-router></b-pagination-nav>
<b-pagination-nav :pages="pages3" use-router></b-pagination-nav>
</template>
<script>
export default {
data() {
return {
pages1: ['?page=1', '?page=2', '?page=3'],
pages2: [
{ link: '?page=1', text: 'One' },
{ link: '?page=2', text: 'Two' },
{ link: '?page=3', text: 'Three' }
],
pages3: [
{ link: { query: { page: 1 } }, text: 'Page 1' },
{ link: { query: { page: 2 } }, text: 'Page 2' },
{ link: { query: { page: 3 } }, text: 'Page 3' }
]
}
}
}
</script>
外観のカスタマイズ
表示されるページボタンの数(省略記号を含むが、最初、前へ、次へ、最後のボタンは除く)を制限するには、limit
プロパティを使用して、目的のページボタンの数(省略記号を含む場合)を指定します。limit
のデフォルトは5
です。サポートされている最小値は3
です。limit
が3
に設定されている場合、実際上は省略記号インジケーターは表示されません。
first
ボタンとlast
ボタンは、hide-goto-end-buttons
プロパティを設定することでオプションで非表示にすることができます。
ellipsis
の表示は、hide-ellipsis
プロパティを設定することでオプションで無効にできます。
小画面対応
小画面(モバイルなど)では、<b-pagination-nav>
ボタンの一部が非表示になります。これは、ページネーションインターフェースが複数行に渡って表示される可能性を最小限に抑えるためです。
- 省略記号インジケーターは、
xs
以下の画面では非表示になります。 xs
以下の画面では、ページ番号ボタンは最大3個までしか表示されません。
これにより、先頭、前へ、次へ、末尾のボタンと共に、ページ番号ボタンが3個を超えて表示されることはありません。
ボタンの内容
<b-pagination-nav>
は、外観をカスタマイズできるいくつかのprops/slotをサポートしています。すべての*-text
propsはテキストのみでHTMLを削除しますが、同名のslotを使うことでHTMLを含めることができます。
利用可能なすべてのslotの完全なリストについては、以下のスロットセクションを参照してください。
<template>
<div class="overflow-auto">
<b-pagination-nav
number-of-pages="10"
base-url="#"
first-text="First"
prev-text="Prev"
next-text="Next"
last-text="Last"
></b-pagination-nav>
<b-pagination-nav
number-of-pages="10"
base-url="#"
first-text="⏮"
prev-text="⏪"
next-text="⏩"
last-text="⏭"
class="mt-4"
></b-pagination-nav>
<b-pagination-nav
number-of-pages="10"
base-url="#"
class="mt-4"
>
<template #first-text><span class="text-success">First</span></template>
<template #prev-text><span class="text-danger">Prev</span></template>
<template #next-text><span class="text-warning">Next</span></template>
<template #last-text><span class="text-info">Last</span></template>
<template #ellipsis-text>
<b-spinner small type="grow"></b-spinner>
<b-spinner small type="grow"></b-spinner>
<b-spinner small type="grow"></b-spinner>
</template>
<template #page="{ page, active }">
<b v-if="active">{{ page }}</b>
<i v-else>{{ page }}</i>
</template>
</b-pagination-nav>
</div>
</template>
スロットpage
は常にスコープされますが、スロットfirst-text
、prev-text
、next-text
、last-text
はオプションでスコープされます。ellipsis-text
スロットはスコープされません。
page
スロットで使用可能なスコープ変数プロパティ
プロパティ | 型 | 説明 |
page | 数値 | ページ番号(1 からnumberOfPages まで) |
index | 数値 | ページ番号(0 からnumberOfPages -1 まで) |
active | ブール値 | ページがアクティブなページかどうか |
disabled | ブール値 | ページボタンが無効になっているかどうか |
content | 文字列 | デフォルトの内容、またはpage-gen 関数の結果 |
first-text
、prev-text
、next-text
、last-text
スロットで使用可能なスコープ変数プロパティ
プロパティ | 型 | 説明 |
page | 数値 | ページ番号(1 からnumberOfPages まで) |
index | 数値 | ページ番号(0 からnumberOfPages -1 まで) |
disabled | ブール値 | ページボタンが無効になっているかどうか |
対応するページに移動するための先頭および末尾のページ番号を持つボタンを使用する場合は、first-number
とlast-number
propsを使用してください。
<template>
<div class="overflow-auto">
<div>
<h6>Goto first button number</h6>
<b-pagination-nav
v-model="currentPage"
:number-of-pages="pages"
base-url="#"
first-number
></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Goto last button number</h6>
<b-pagination-nav
v-model="currentPage"
:number-of-pages="pages"
base-url="#"
last-number
></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Goto first and last button number</h6>
<b-pagination-nav
v-model="currentPage"
:number-of-pages="pages"
base-url="#"
first-number
last-number
></b-pagination-nav>
</div>
</div>
</template>
<script>
export default {
data() {
return {
pages: 100,
currentPage: 5
}
}
}
</script>
size
propを小さなボタンの場合は'sm'
、大きなボタンの場合は'lg'
に設定することで、デフォルトのボタンサイズをオプションで変更できます。
<template>
<div class="overflow-auto">
<div>
<h6>Small</h6>
<b-pagination-nav size="sm" number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Default</h6>
<b-pagination-nav number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Large</h6>
<b-pagination-nav size="lg" number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
</div>
</template>
ピルスタイル
pills
propを設定することで、簡単にピルスタイルのボタンに切り替えることができます。
<template>
<div class="overflow-auto">
<div>
<h6>Small Pills</h6>
<b-pagination-nav pills size="sm" number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Default Pills</h6>
<b-pagination-nav pills number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Large Pills</h6>
<b-pagination-nav pills size="lg" number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
</div>
</template>
**注記:** ピルスタイルを使用するには、BootstrapVueのカスタムCSS/SCSSが必要です。
配置
デフォルトでは、ページネーションコンポーネントは左寄せです。align
propを適切な値に設定することで、配置をcenter
、right
(right
はend
のエイリアスです)、または'fill'に変更できます。
<template>
<div class="overflow-auto">
<div>
<h6>Left alignment (default)</h6>
<b-pagination-nav number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
<div class="mt-3">
<h6 class="text-center">Center alignment</h6>
<b-pagination-nav number-of-pages="10" base-url="#" align="center"></b-pagination-nav>
</div>
<div class="mt-3">
<h6 class="text-right">Right (end) alignment</h6>
<b-pagination-nav number-of-pages="10" base-url="#" align="right"></b-pagination-nav>
</div>
<div class="mt-3">
<h6 class="text-center">Fill alignment</h6>
<b-pagination-nav number-of-pages="10" base-url="#" align="fill"></b-pagination-nav>
</div>
</div>
</template>
自動現在のページ検出とv-model
サポート
<b-pagination-nav>
は、ページの現在のURLまたは$route
(ルーターが検出された場合)に基づいて、どのページボタンをアクティブにするかを自動的に検出しようとします。ページを検出できない場合、ページ番号ボタンはアクティブ状態にならず、ページボタンがクリックされるまで、先頭、前へ、次へ、末尾のボタンはすべて無効状態になります。
v-model
はオプションでサポートされています(input
イベントによって更新され、value
propに関連付けられています)。v-model
をnull
(デフォルト)に設定すると、最初は自動アクティブページ検出がトリガーされ、その後、現在のページ番号(1
からページ数まで)で更新されます。v-model
を1
以上の値に最初に設定した場合、自動ページ検出は発生しません(ユーザーがページボタンをクリックするまで)。そして、v-model
で指定されたページがactive
として設定されます。
自動アクティブページ検出を無効にするには、no-page-detect
propをtrue
に設定します。
**注記:** 自動ページ検出は、一致が検出されるまで、すべての可能なページリンクをループする必要があります。number-of-pages
が大きい場合、このチェックには時間がかかる可能性があるため、v-model
とno-page-detect
propを使用して、アクティブなページを手動で制御することをお勧めします。
ページの選択を阻止する
ページの選択を阻止するオプションを提供するpage-click
イベントをリッスンできます。このイベントは、2つの引数で発行されます。
bvEvent
: BvEvent
オブジェクト。ページの選択をキャンセルするにはbvEvent.preventDefault()
を呼び出します。 page
: 選択するページ番号(1
から始まる)
アクセシビリティの理由から、page-click
イベントを使用してページの選択を阻止する場合は、ページを選択できない理由をユーザーに通知する手段を提供する必要があります。page-click
イベントを使用する代わりに、<b-pagination-nav>
コンポーネントでdisabled
属性を使用することをお勧めします(disabled
は、スクリーンリーダーユーザーにとってより直感的です)。
アクセシビリティ
<b-pagination-nav>
コンポーネントは、aria-
属性やキーボードナビゲーションなど、支援技術ユーザーをサポートするための多くの機能を提供しています。
ARIAラベル
<b-pagination-nav>
は、コンポーネント内のさまざまな要素のaria-label
属性を設定するために使用されるさまざまな*-label-*
propsを提供し、支援技術のユーザーを支援します。
プロパティ | aria-label コンテンツのデフォルト |
label-first-page | "最初のページへ移動" |
label-prev-page | "前のページへ移動" |
label-next-page | "次のページへ移動" |
label-last-page | "最後のページへ移動" |
label-page | "ページへ移動"、ページ番号が追加されます |
aria-label | "ページネーション"、外部ページネーションコンテナに適用されます |
label-page
は、aria-labelを生成する関数をオプションで受け入れます。関数は、ページ番号(1からページ数まで)を1つの引数として渡されます。
プロパティを空文字列(''
)に設定することで、ラベルを削除できますが、ボタンのコンテンツがその目的をテキストで伝える場合を除き、これはお勧めしません。
キーボードナビゲーション
<b-pagination-nav>
は、標準のTabキーナビゲーションをサポートしています。
参照
ルーターリンク固有のpropsについては、ルーターサポートリファレンスページを参照してください。
<b-table>
などのコンポーネント、またはページネーションリストのページネーション制御には、代わりに<b-pagination>
コンポーネントを使用してください。