分頁

分頁控制另一個組件(如 <b-table> 或清單)的快速第一頁、上一頁、下一頁、最後一頁和頁面按鈕。

概觀

<b-pagination> 是提供目前頁碼輸入控件的自訂輸入組件。應透過應用程式中的 v-model 將值繫結。頁碼從 1 開始編號。頁面數是從所提供的 total-rowsper-page 屬性值中計算出來。

對於會變更到新 URL 的分頁,請改用 <b-pagination-nav> 組件。

<b-table> 一起使用的範例

<template>
  <div class="overflow-auto">
    <b-pagination
      v-model="currentPage"
      :total-rows="rows"
      :per-page="perPage"
      aria-controls="my-table"
    ></b-pagination>

    <p class="mt-3">Current Page: {{ currentPage }}</p>

    <b-table
      id="my-table"
      :items="items"
      :per-page="perPage"
      :current-page="currentPage"
      small
    ></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        perPage: 3,
        currentPage: 1,
        items: [
          { id: 1, first_name: 'Fred', last_name: 'Flintstone' },
          { id: 2, first_name: 'Wilma', last_name: 'Flintstone' },
          { id: 3, first_name: 'Barney', last_name: 'Rubble' },
          { id: 4, first_name: 'Betty', last_name: 'Rubble' },
          { id: 5, first_name: 'Pebbles', last_name: 'Flintstone' },
          { id: 6, first_name: 'Bamm Bamm', last_name: 'Rubble' },
          { id: 7, first_name: 'The Great', last_name: 'Gazzoo' },
          { id: 8, first_name: 'Rockhead', last_name: 'Slate' },
          { id: 9, first_name: 'Pearl', last_name: 'Slaghoople' }
        ]
      }
    },
    computed: {
      rows() {
        return this.items.length
      }
    }
  }
</script>

<!-- b-pagination.vue -->

自訂外觀

<b-pagination> 支援幾個屬性/插槽,供您自訂外觀。所有 *-text 屬性都是純文字,並移除 HTML,但您可以使用其同名的插槽對應項。

限制顯示的按鈕數

若要限制顯示的頁面按鈕數(包含省略符號,但不包含第一個、上一個、下一個和最後一個按鈕),請使用 limit 屬性,以指定所需的頁面按鈕數(包含省略符號,如果顯示)。預設的 limit5。支援的最小值為 3。當 limit 設為 3 時,基於實際用途不會顯示任何省略符號指標。

可以透過設定 hide-goto-end-buttons prop 來選擇性隱藏 firstlast 按鈕。

可以透過設定 hide-ellipsis prop 來選擇性停用顯示 ellipsis

支援小型螢幕

在小型螢幕(例如行動裝置)上,部分 <b-pagination> 按鈕將會隱藏,以最大程度降低分頁介面換行到多行的可能性

  • xs 和更小的螢幕上將會隱藏省略符號指標。
  • 頁碼按鈕在 xs 螢幕及更小的螢幕上將限制為最多顯示 3 個。

這可確保最多只有 3 個頁碼按鈕可見,連同 goto firstprevnextlast 按鈕。

按鈕內容

如需所有可用 slot 的完整清單,請參閱下方 Slots 區段。

<template>
  <div class="overflow-auto">
    <!-- Use text in props -->
    <b-pagination
      v-model="currentPage"
      :total-rows="rows"
      :per-page="perPage"
      first-text="First"
      prev-text="Prev"
      next-text="Next"
      last-text="Last"
    ></b-pagination>

    <!-- Use emojis in props -->
    <b-pagination
      v-model="currentPage"
      :total-rows="rows"
      :per-page="perPage"
      first-text="⏮"
      prev-text="⏪"
      next-text="⏩"
      last-text="⏭"
      class="mt-4"
    ></b-pagination>

    <!-- Use HTML and sub-components in slots -->
    <b-pagination
      v-model="currentPage"
      :total-rows="rows"
      :per-page="perPage"
      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>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        rows: 100,
        perPage: 10,
        currentPage: 1
      }
    }
  }
</script>

<!-- b-pagination-appearance.vue -->

slot page 始終有範圍,而 slot first-textprev-textnext-textlast-text 可選擇有範圍。slot ellipsis-text 沒有範圍。

提供给 page slot 的有範圍變數屬性

屬性 類型 說明
page 數字 頁碼(從 1numberOfPages
index 數字 頁碼(從 0numberOfPages -1 編號)
active 布林值 如果頁面是目前頁面
disabled 布林值 如果頁面按鈕已停用
content 字串 頁碼為字串

提供給 first-textprev-textnext-textlast-text slot 的有範圍變數屬性

屬性 類型 說明
page 數字 頁碼(從 1numberOfPages
index 數字 頁碼(從 0numberOfPages -1 編號)
disabled 布林值 如果頁面按鈕已停用

跳到第一頁/最後一頁按鈕類型

如果偏好使用帶有第一頁和最後一頁頁碼的按鈕前往相應頁面,請使用 first-numberlast-number prop。

<template>
  <div class="overflow-auto">
    <div>
      <h6>Goto first button number</h6>
      <b-pagination
        v-model="currentPage"
        :total-rows="rows"
        :per-page="perPage"
        first-number
      ></b-pagination>
    </div>

    <div class="mt-3">
      <h6>Goto last button number</h6>
      <b-pagination
        v-model="currentPage"
        :total-rows="rows"
        :per-page="perPage"
        last-number
      ></b-pagination>
    </div>

    <div class="mt-3">
      <h6>Goto first and last button number</h6>
      <b-pagination
        v-model="currentPage"
        :total-rows="rows"
        :per-page="perPage"
        first-number
        last-number
      ></b-pagination>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        rows: 100,
        perPage: 1,
        currentPage: 5
      }
    }
  }
</script>

<!-- b-pagination-goto-first-last-number.vue -->

按鈕大小

透過將 size prop 設定為 'sm' 以獲得較小的按鈕,或 'lg' 以獲得較大的按鈕,可選擇性地從預設按鈕大小加以變更。

<template>
  <div class="overflow-auto">
    <div>
      <h6>Small</h6>
      <b-pagination v-model="currentPage" :total-rows="rows" size="sm"></b-pagination>
    </div>

    <div class="mt-3">
      <h6>Default</h6>
      <b-pagination v-model="currentPage" :total-rows="rows"></b-pagination>
    </div>

    <div class="mt-3">
      <h6>Large</h6>
      <b-pagination v-model="currentPage" :total-rows="rows" size="lg"></b-pagination>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        rows: 100,
        currentPage: 1
      }
    }
  }
</script>

<!-- b-pagination-size.vue -->

藥丸樣式

透過設定 pills prop,可輕鬆切換為藥丸樣式按鈕

<template>
  <div class="overflow-auto">
    <div>
      <h6>Small Pills</h6>
      <b-pagination v-model="currentPage" pills :total-rows="rows" size="sm"></b-pagination>
    </div>

    <div class="mt-3">
      <h6>Default Pills</h6>
      <b-pagination v-model="currentPage" pills :total-rows="rows"></b-pagination>
    </div>

    <div class="mt-3">
      <h6>Large Pills</h6>
      <b-pagination v-model="currentPage" pills :total-rows="rows" size="lg"></b-pagination>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        rows: 100,
        currentPage: 1
      }
    }
  }
</script>

<!-- b-pagination-pills.vue -->

注意:藥丸樣式需要 BootstrapVue 的自訂 CSS/SCSS。

對齊方式

預設情況下,分頁元件是靠左對齊。將對齊方式變更為 centerrightrightend 的別名),或透過設定 prop align 為適當的值,從而填滿 fill

<template>
  <div class="overflow-auto">
    <div>
      <h6>Left alignment (default)</h6>
      <b-pagination v-model="currentPage" :total-rows="rows"></b-pagination>
    </div>

    <div class="mt-3">
      <h6 class="text-center">Center alignment</h6>
      <b-pagination v-model="currentPage" :total-rows="rows" align="center"></b-pagination>
    </div>

    <div class="mt-3">
      <h6 class="text-right">Right (end) alignment</h6>
      <b-pagination v-model="currentPage" :total-rows="rows" align="right"></b-pagination>
    </div>

    <div class="mt-3">
      <h6 class="text-center">Fill alignment</h6>
      <b-pagination v-model="currentPage" :total-rows="rows" align="fill"></b-pagination>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        rows: 100,
        currentPage: 3
      }
    }
  }
</script>

<!-- b-pagination-alignment.vue -->

防止選擇頁面

您可以偵聽提供選項以防止從選取頁面的page-click 事件。該事件會發射兩個參數

  • bvEventBvEvent 物件。呼叫 bvEvent.preventDefault() 以取消頁面選取
  • page:需要選取的頁碼(從 1 開始)

由於無障礙原因,當使用 page-click 事件以防止選取頁面時,您應該提供一些通知方式,告知使用者無法選取頁面的原因。建議在 <b-pagination> 元件中使用 disabled 屬性,而非 page-click 事件(因為對於螢幕朗讀程式使用者而言,disabled 較為直覺)

輔助性

<b-pagination> 元件提供許多功能以支援輔助性技術使用者,例如 aria- 屬性和鍵盤導覽。

aria-controls

當分頁控制頁面上的另一個元件時(例如 <b-table>),將 aria-controls 屬性設定為所控制元素的 id。這能協助視障使用者知道正在更新或控制的元件為何。

ARIA 標籤

<b-pagination> 提供各種 *-label-* 屬性,用於設定元件中各個元素的 aria-label 屬性,這能協助輔助性技術的使用者。

屬性 aria-label 內容預設值
label-first-page "前往第一頁"
label-prev-page "前往上一頁"
label-next-page "前往下一頁"
label-last-page "前往最後一頁"
label-page "前往第 x 頁"(其中 "x" 會附加上頁數)
aria-label "分頁",用於套用在外層分頁容器上

label-page 可選擇接受一個函式以產生 aria-label。該函式傳遞一個參數,即頁數(從 1 到頁數進行編號)。

您可以透過將屬性設定為空字串('')以移除任何標籤。不過,除非按鈕文字的內容清楚傳達其目的,否則不建議這麼做。

支援鍵盤導覽

<b-pagination> 支援開箱即用的鍵盤導覽功能,並遵循 WAI-ARIA roving tabindex 模式。

  • 按 Tab 鍵進入分頁元件會自動對焦目前啟用的頁面按鈕
  • 向左(或 向上)及 向右(或 向下)箭頭鍵會分別對應頁面清單中前一個和下一個按鈕。
  • Enter空白鍵 會選取(按一下)目前對焦的按鈕。
  • 按一下 Tab 會移至頁面上一個控制項或連結,而按一下 Shift+Tab 會移至頁面上一個控制項或連結。

另請參閱

對於基於導覽的 phân trang,請參閱 <b-pagination-nav> 元件。

元件參考

<b-pagination>

屬性

所有屬性的預設值都 可以全域設定

屬性
(按一下來升冪排序)
類型
(按一下來升冪排序)
預設值
說明
align
字串'left'頁面按鈕的對齊方式:'start' (或 'left')、'center'、'end' (或 'right'),或 'fill'
aria-controls
字串如果此元件控制另一個元件或元素,請將其設定為受控元件或元素的 ID
aria-label
字串'Pagination'放置在分頁控制的 'aria-label' 屬性中的值
disabled
布林值false設定為 `true` 時,會停用元件的功能並使其處於停用狀態
ellipsis-class
v2.3.0+
陣列物件字串套用於 'ellipsis' 暫停符號的類別
ellipsis-text
字串'…'放置在暫停符號暫停符號中的內容
first-class
v2.3.0+
陣列物件字串套用於 '前往第一頁' 按鈕的類別
first-number
v2.3.0+
布林值false顯示第一頁號碼,而不是「前往第一頁」按鈕
first-text
字串'«'放置在前往第一頁按鈕中的內容
hide-ellipsis
布林值false不要顯示暫停符號按鈕
hide-goto-end-buttons
布林值false隱藏前往第一頁以及前往最後一頁的按鈕
label-first-page
字串'前往第一頁'放置在前往第一頁按鈕的 'aria-label' 屬性中的值
label-last-page
字串'前往最後一頁'放置在前往最後一頁按鈕的 'aria-label' 屬性中的值
label-next-page
字串'前往下一頁'放置在前往下一頁按鈕的 'aria-label' 屬性中的值
label-page
函式字串'前往頁面'放置在前往頁面按鈕的 'aria-label' 屬性中的值。頁碼會自動加到前面
label-prev-page
字串'前往上一頁'放置在前往上一頁按鈕的 'aria-label' 屬性中的值
last-class
v2.3.0+
陣列物件字串套用於 '前往最後一頁' 按鈕的類別
last-number
v2.3.0+
布林值false顯示最後一頁號碼,而不是「前往最後一頁」按鈕
last-text
字串'»'放置在前往最後一頁按鈕中的內容
limit
數字字串5要顯示的最大按鈕數目(包括暫停符號,但排除輔助按鈕)
next-class
v2.3.0+
陣列物件字串套用於 '前往下一頁' 按鈕的類別
next-text
字串'›'放置在前往下一頁按鈕中的內容
page-class
v2.3.0+
陣列物件字串套用於 '前往頁面 #' 按鈕的類別
per-page
數字字串20每頁列數
pills
v2.1.0+
布林值false套用藥丸樣式到 phân trang 按鈕
prev-class
v2.3.0+
陣列物件字串套用於 '前往上一頁' 按鈕的類別
prev-text
字串'‹'放置在前往上一頁按鈕中的內容
size
字串顯示按鈕的大小:'sm'、'md'(預設值)或 'lg'
total-rows
數字字串0資料集中總列數
屬性
v-model
布林值數字字串null目前從 1 開始的頁碼

v-model

屬性
事件
屬性input

插槽

名稱
範圍
說明
ellipsis-text 「...」指標的內容。覆寫 `ellipsis-text` 屬性
first-text 「前往第一頁」按鈕的內容
last-text 「前往最後一頁」按鈕的內容
next-text 「前往下一頁」按鈕的內容
page 頁碼按鈕的內容
prev-text 「前往上一頁」按鈕的內容

事件

事件
引數
說明
變更
  1. 頁碼 - 選取之頁碼 (從 `1` 開始)
使用者互動導致頁面變更時會觸發
input
  1. page - 選取的頁碼 (從 `1` 開始),或如果找不到頁碼則為 `null`
使用者互動或程式變更頁面時會觸發
page-click v2.17.0+
  1. bvEvent - `BvEvent` 物件。呼叫 `bvEvent.preventDefault()` 以取消頁面選取
  2. 頁碼 - 要選取的頁碼 (從 `1` 開始)
按一下頁面按鈕時會觸發。可取消

匯入個別元件

你可以透過以下已命名匯出,將個別元件匯入你的專案

元件
已命名匯出
匯入路徑
<b-pagination>BPaginationbootstrap-vue

範例

import { BPagination } from 'bootstrap-vue'
Vue.component('b-pagination', BPagination)

以 Vue.js 外掛身分匯入

此外掛包含上面所列的所有個別元件. 外掛也包含任何元件別名。

已命名匯出
匯入路徑
PaginationPluginbootstrap-vue

範例

import { PaginationPlugin } from 'bootstrap-vue'
Vue.use(PaginationPlugin)