or lists).">or lists).">

分页

快速的第一页、上一页、下一页、最后一页和页面按钮,用于控制其他组件(如 <b-table> 或列表)的分页。

概述

<b-pagination> 是一个自定义输入组件,提供当前页码输入控件。该值应通过应用中的 v-model 进行绑定。页码从 1 开始索引。页数根据提供的 total-rowsper-page 的 prop 值计算得出。

对于更改为新 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> 支持多个 prop/slot,允许你自定义外观。所有 *-text prop 都是纯文本,并会去除 HTML,但你可以使用同名 slot 对应项。

限制显示的按钮数量

要限制显示的页面按钮数量(包括省略号,但不包括第一个、上一个、下一个和最后一个按钮),请使用 limit prop 指定所需的页面按钮数量(包括省略号,如果显示)。默认 limit5。支持的最小值为 3。当 limit 设置为 3 时,出于实际目的,将不会显示省略号指示符。

可以通过设置 hide-goto-end-buttons prop 来选择性地隐藏 firstlast 按钮。

可以通过设置 hide-ellipsis prop 来选择性地禁用 ellipsis 的显示。

小屏幕支持

在较小的屏幕(即移动设备)上,一些 <b-pagination> 按钮将被隐藏,以最大程度地减少分页界面换行到多行的可能性

  • 省略号指示符将在 xs 及更小的屏幕上隐藏。
  • 页面编号按钮在 xs 屏幕及更小屏幕上最多只能显示 3 个。

这可确保最多只能显示 3 个页面编号按钮,以及转到第一页上一页下一页最后一页的按钮。

按钮内容

有关所有可用插槽的完整列表,请参阅下面的 插槽 部分。

<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 -->

插槽 page 始终有作用域,而插槽 first-textprev-textnext-textlast-text 则可以选择有作用域。插槽 ellipsis-text 没有作用域。

插槽 page 可用的作用域变量属性

属性 类型 说明
page 数字 页码(从 1numberOfPages
index 数字 页码(从 0 索引到 numberOfPages -1
active 布尔值 如果该页是活动页
disabled 布尔值 如果页面按钮已禁用
content 字符串 作为字符串的页码

插槽 first-textprev-textnext-textlast-text 可用的作用域变量属性

属性 类型 说明
page 数字 页码(从 1numberOfPages
index 数字 页码(从 0 索引到 numberOfPages -1
disabled 布尔值 如果页面按钮已禁用

转到第一页/最后一页按钮类型

如果您希望使用第一页和最后一页的按钮转到相应页面,请使用 first-numberlast-number 属性。

<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 属性设置为 '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 属性,可以轻松切换到药丸样式按钮

<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。

对齐

默认情况下,分页组件左对齐。通过将 prop align 设置为相应的值,可以将对齐方式更改为 centerrightrightend 的别名)或 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 prop 设置为它所控制的元素的 id。这将帮助视力障碍用户了解正在更新/控制哪个组件。

ARIA 标签

<b-pagination> 提供各种 *-label-* prop,用于设置组件内各种元素上的 aria-label 属性,这将帮助辅助技术用户。

Prop aria-label 内容默认值
label-first-page "转到第一页"
label-prev-page “转到上一页”
label-next-page “转到下一页”
label-last-page “转到最后一页”
label-page “转到第”后跟页码
aria-label “分页”,应用于外部分页容器

label-page 可选择接受一个函数来生成 aria-label。该函数传递一个参数,即页码(从 1 到页数)。

你可以通过将属性设置为一个空字符串 ('') 来移除任何标签,但除非按钮文本的内容传达了其目的,否则不建议这样做。

键盘导航支持

<b-pagination> 开箱即用支持键盘导航,并遵循 WAI-ARIA 巡回 tab 索引 模式。

  • 切换到分页组件时,将自动聚焦当前活动页按钮
  • (或 )和 (或 )箭头键将分别聚焦页面列表中的上一个和下一个按钮
  • Enter空格 键将选择(单击)当前聚焦的页面按钮
  • Tab 将移动到页面上的下一个控件或链接,而按 Shift+Tab 将移动到页面上的上一个控件或链接。

另请参见

对于基于导航的分页,请参阅 <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+
ArrayObjectString应用于 'ellipsis' 占位符的类
ellipsis-text
字符串'…'放置在省略号占位符中的内容
first-class
v2.3.0+
ArrayObjectString应用于 '转到第一页' 按钮的类
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
FunctionString'转到页面'放置在转到页面按钮的 'aria-label' 属性中的值。页码将自动添加在前面
label-prev-page
字符串'转到上一页'放置在转到上一页按钮的 'aria-label' 属性中的值
last-class
v2.3.0+
ArrayObjectString应用于“转到最后一页”按钮的类
last-number
v2.3.0+
布尔值false显示最后一页页码,而不是转到最后一页按钮
last-text
字符串'»'放置在转到最后一页按钮中的内容
limit
NumberString5要显示的最大按钮数(包括省略号(如果显示),但不包括书挡按钮)
next-class
v2.3.0+
ArrayObjectString应用于“转到下一页”按钮的类
next-text
字符串'›'放置在转到下一页按钮中的内容
page-class
v2.3.0+
ArrayObjectString应用于“转到第 # 页”按钮的类
per-page
NumberString20每页行数
pills
v2.1.0+
布尔值false将药丸样式应用于分页按钮
prev-class
v2.3.0+
ArrayObjectString应用于“转到上一页”按钮的类
prev-text
字符串'‹'放置在转到上一页按钮中的内容
size
字符串呈现的按钮大小:“sm”、“md”(默认)或“lg”
total-rows
NumberString0数据集中的总行数
value
v-model
BooleanNumberStringnull当前页码,从 1 开始

v-model

属性
事件
valueinput

插槽

名称
作用域
说明
ellipsis-text “...”指示符内容。覆盖 `ellipsis-text` 属性
first-text “转到第一页”按钮内容
last-text “转到最后一页”按钮内容
next-text “转到下一页”按钮内容
page 页码按钮内容
prev-text “转到上一页”按钮内容

事件

事件
参数
说明
change
  1. page - 选定的页码(从 `1` 开始)
当用户交互时触发页面更改
input
  1. page - 选定的页码(从 `1` 开始),如果没有找到页面,则为 `null`
当用户交互或通过编程方式更改页面时触发
page-click v2.17.0+
  1. bvEvent - `BvEvent` 对象。调用 `bvEvent.preventDefault()` 以取消页面选择
  2. page - 要选择的页码(从 `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)