首页
中文手册
组件
分页导航
分页导航(Pagination Navigation)
快速第一,上一,下一,最后和页面按钮,用于基于导航的分页,支持常规链接或路由器链接。
Show page table of contents
b-pagination-nav
将尝试根据当前页面的URL
(通过$route
detection或
(如果未检测到$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>
是提供导航分页的自定义输入组件。
用页数属性设置的总页数
。页码是从1到页数
的索引。
页面链接和编号生成
默认情况下,<b-pagination-nav>
生成基本url
标记,将ref属性设置为与页码连接的基本url。基本url
属性默认为“/”。页数
是通过页数属性指定的。页数
是从1
到页数的数字。
路由器链接
要将页面链接生成为 <router link>
组件
(或者如果检测到Nuxt.js
则生成<nuxt-link>
),
请设置use-router
属性。然后,HREF将成为路由器链接的to
属性。
或者,可以选择使用链接生成器函数将路由器链接返回到
位置 对象。
如果在应用程序中未检测到$router
,
<b-pagination-nav>
将回退到常规的 <a>
元素,
并且任何 to
location对象将转换为标准URL(如果可能)。
支持以下路由器链接特定的属性:
active-class
exact
exact-active-class
no-prefetch
(<nuxt-link>
特殊属性)
有关上述道具的详细信息,请参阅路由器链接支持 参考部分。
链接生成器功能
如果需要对生成的链接url进行更细粒度的控制或将<router-link>
设置为props,
则可以将link-gen
属性设置为接收两个参数的函数引用:页码和包含两个字段
(link
和
page
)的对象,其中page
是页码,
link
是内部生成的链接。
link-gen
函数应该返回一个字符串(用于ref)或一个路由器到对象。
如果返回的值是一个对象,则始终会生成路由器链接(如果检测到$router
)。
如果返回值是字符串,则默认情况下会生成标准链接,除非设置了use-router
属性。
如果使用了to
location对象,那么 基本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
location对象返回到标准链接时(当没有可用的$router
时),只有以下位置属性用于生成URL:
path
(如果未提供,则默认为页面的当前URL路径)
query
hash
(如果使用,必须包含前导#
)
不支持 名称
路由和 参数
的转换。
页码生成
默认情况下,<b-pagination-nav>
在页面链接按钮中呈现页码(1-N)。
您可以通过向page-gen
属性提供函数引用来重写此行为。函数引用应该接受一个单独的参数,即页码(1-N)。
page-gen
函数应该返回一个字符串。
注意:
不 支持生成的页码字符串中的HTML内容。对于基本HTML,可以使用作用域槽页进行更细粒度的格式化。
示例:使用链接数组生成分页:
<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 >
提供页面数组
您可以通过pages
属性传递一个链接数组,而不是使用 Rather than using 页数
来自动生成页面链接。
当pages
属性的数组长度为1
或更大时,它将用于生成页面链接。
数组可以是以下两种格式之一:
字符串数组,其中每个条目都是一个链接。 在这种模式下,页面按钮的编号将自动设置为1
至阵列中的条目数。
对象数组,其中每个对象有两个字段:链接(必需)和文本(可选)。链接可以是指定链接的字符串,也可以是to location对象。文本将是页面链接按钮的内容。如果省略文本,则页面按钮内容将默认为页码。
当提供字符串链接时,<b-pagination-nav>
将使用
常规的<a>
元素,除非设置了 use-router
属性。
当link(在array of objects表单中)是 to
location对象时,将自动生成路由器链接(如果检测到$router
)。
使用数组格式时,链接字符串(和/或位置对象)用作as,并且基本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
属性指定所需的页面按钮数(包括省略号,如果显示)。
默认限制为5
。支持的最小值为3
。
当limit
设置为3时,出于实际目的,不会显示省略号指示器。
通过设置hide-goto-end-buttons
属性,可以选择隐藏 第一个
和 最后一个
。
通过设置隐藏省略号
属性,可以选择性地禁用省略号
的显示。
小屏幕支持
在较小的屏幕(即移动屏幕)上,一些<b-pagination-nav>
按钮将被隐藏,以最小化分页界面包装到多行的可能性:
省略号指示符将隐藏在 xs
或更小的屏幕上。
页码按钮将限制为在xs
屏幕上最多可见3个或更小。
这样可以确保不超过3个页码按钮以及“转到第一页”、“上一页”、“下一页”和“最后一页”按钮可见。
按钮内容
<b-pagination-nav>
支持多个道具/插槽,允许您自定义外观。
所有的*-text
属性都是纯文本的,去掉了HTML,但是您可以使用它们相同名称的插槽对应项。
有关所有可用插槽的完整列表,请参阅下面的Slots 部分。
<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 v-slot:first-text > <span class ="text-success" > First</span > </template >
<template v-slot:prev-text > <span class ="text-danger" > Prev</span > </template >
<template v-slot:next-text > <span class ="text-warning" > Next</span > </template >
<template v-slot:last-text > <span class ="text-info" > Last</span > </template >
<template v-slot: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 v-slot:page ="{ page, active }" >
<b v-if ="active" > {{ page }}</b >
<i v-else > {{ page }}</i >
</template >
</b-pagination-nav >
</div >
</template >
slo页面
始终具有作用域,而slots first-text
,
prev-text
,
next-text
和
last-text
可以选择作用域。省略文本
槽没有作用域。
页面
可用的作用域变量属性:
属性
类型
描述
page
Number
页码(从1
到页码
)
index
Number
页码(从0
索引到页码 -1
)
active
Boolean
如果该页是活动页
disabled
Boolean
如果页面按钮被禁用
content
String
默认内容,或页面生成
函数的结果
第一个文本
,
上一个文本
,
下一个文本
和
最后一个文本
槽可用的作用域变量属性:
属性
类型
描述
page
Number
页码(从 1
到页码
)
index
Number
页码(从0
索引到页码-1
)
disabled
Boolean
如果页面按钮被禁用
如果希望有带有第一个和最后一个页码的按钮转到相应的页面,请使用第一个页码
和
最后一个页码
属性。
<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
”属性设置为“'sm'
”表示较小的按钮,
或将“'lg'
”表示较大的按钮,可以选择从默认按钮大小更改为“'sm'
”。
<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 >
Pill 样式
通过设置pills
属性轻松切换到pill样式按钮
<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 >
注意: pill样式需要BootstrapVue的自定义CSS/SCSS。
对齐
默认情况下,分页组件是左对齐的。通过将属性align
设置为适当的值,将align更改为 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
是可选支持的(由输入事件更新,并绑定到值属性)。
最初将v-model
设置为null
(默认值)将触发自动活动页面检测,
随后将使用当前页码(从1
到页数的索引)进行更新。如果最初将v-model
设置为1或更大的值,
则不会进行自动页面检测(直到用户单击页面按钮之后),v-model
指定的页面将设置为活动页面。
要禁用自动活动页面检测,请将无页面检测
属性设置为true
。
注意:
自动页面检测需要遍历所有可能的页面链接,直到检测到匹配。对于更多的页面,此检查可能需要一些时间,因此您可能希望通过v-model
和
no-page-detect
属性手动控制哪个页面处于活动状态。
可访问性
<b-pagination-nav>
组件提供了许多支持辅助技术用户的功能,
例如aria
属性和键盘导航。
ARIA标签
<b-pagination-nav>
提供各种*-label-*
属性,
用于设置组件中各个元素的aria-label
属性,这将帮助辅助技术的用户。
属性
aria-label
内容默认值
label-first-page
"Goto first page"
label-prev-page
"Goto previous page"
label-next-page
"Goto next page"
label-last-page
"Goto last page"
label-page
"Goto page", 附页码
aria-label
"Pagination", 应用于外部分页容器
label页面
可以选择接受一个函数来生成aria标签。函数被传递一个参数,即页码(从1到页数的索引)。
您可以通过将prop设置为空字符串(''
)来移除任何标签,但不建议这样做,除非按钮的内容以文本形式传达其用途。
键盘导航
<b-pagination-nav>
支持现成的键盘导航,
并遵循 WAI-ARIA roving tabindex 模式。
切换到分页组件将自动聚焦当前活动页按钮
LEFT (或 UP )和
RIGHT (或 DOWN )箭头键将分别聚焦页面列表中的上一个和下一个按钮
ENTER 或SPACE 键将选择(单击)当前聚焦的页面按钮
按TAB 键将移动到页面上的下一个控件或链接,而按SHIFT +TAB 键将移动到页面上的上一个控件或链接。
另请参阅
请参阅路由器支持 参考页以获取路由器链接特定的道具。
对于组件的分页控制(例如<b-table>
),
请改用<b-pagination>
组件。
组件引用
属性 (Click to sort Ascending)
类型
默认值
描述
disabled
Boolean
false
当设置为“true”时,将禁用组件的功能并将其置于禁用状态
value
v-model
Number or String
当前页码,从1开始
limit
Number or String
5
要显示的最大按钮数(如果显示,则包括省略号,但不包括bookend按钮)
align
String
'left'
页面按钮的对齐方式:“开始”(或“左”)、“中心”、“结束”(或“右”)或“填充”
pills
v2.1.0+
Boolean
false
对分页按钮应用pill样式
hide-goto-end-buttons
Boolean
false
Hides the goto first and goto last page buttons
aria-label
String
'Pagination'
隐藏“转到第一页”和“转到最后一页”按钮
label-first-page
String
'Go to first page'
要放入“转到第一页”按钮的“aria label”属性中的值
first-text
String
'«'
“转到第一页”按钮中要放置的内容
first-number
v2.3.0+
Boolean
false
显示第一个页码而不是转到第一个按钮
first-class
v2.3.0+
String or Array or Object
类应用于“转到第一页”按钮
label-prev-page
String
'Go to previous page'
要放入“转到上一页”按钮的“aria label”属性中的值
prev-text
String
'‹'
“转到上一页”按钮中要放置的内容
prev-class
v2.3.0+
String or Array or Object
类应用于“转到上一页”按钮
label-next-page
String
'Go to next page'
要放入“转到下一页”按钮的“aria label”属性中的值
next-text
String
'›'
“转到下一页”按钮中要放置的内容
next-class
v2.3.0+
String or Array or Object
类应用于“转到下一页”按钮
label-last-page
String
'Go to last page'
要放入“转到最后一页”按钮的“aria label”属性中的值
last-text
String
'»'
“转到最后一页”按钮中要放置的内容
last-number
v2.3.0+
Boolean
false
显示最后一个页码而不是转到最后一个按钮
last-class
v2.3.0+
String or Array or Object
类应用于“转到最后一页”按钮
label-page
String or Function
'Go to page'
要放入“转到页面”按钮的“aria label”属性中的值。页码将自动添加
page-class
v2.3.0+
String or Array or Object
要应用于“转到页面”按钮的类
hide-ellipsis
Boolean
false
不显示省略号按钮
ellipsis-text
String
'…'
要放置在省略号占位符中的内容
ellipsis-class
v2.3.0+
String or Array or Object
要应用于“省略号”占位符的类
size
String
呈现按钮的大小:“sm”、“md”(默认)或“lg”
number-of-pages
Number or String
1
总页数
base-url
String
'/'
自动生成页面链接时使用的基本URL
use-router
Boolean
false
自动生成页面链接时,渲染路由器链接而不是链接
link-gen
Function
链接生成器功能。 有关详细信息,请参阅文档
page-gen
Function
页码生成器功能。 有关详细信息,请参阅文档
pages
Array
页码和链接数组
no-page-detect
Boolean
false
禁用自动检测当前页面
active-class
String
router-link属性:配置在链接处于活动状态时应用的活动CSS类。 通常,您将需要将此设置为类名称“ active”
exact
Boolean
false
router-link属性:默认的活动类匹配行为是包含匹配。 设置此道具会强制模式与路线完全匹配
exact-active-class
String
router-link属性:配置当链接处于完全匹配状态时应用的活动CSS类。 通常,您将需要将此设置为类名称“ active”
no-prefetch
Boolean
false
nuxt-link属性:为了提高Nuxt.js应用程序的响应速度,当链接将显示在视口中时,Nuxt.js将自动预取代码拆分页面。 设置“不预取”将禁用特定链接的此功能
<b-pagination-nav>
支持生成<router-link>
或
<nuxt-link>
组件(如果使用nuxt.js)。
有关路由器链接(或nuxt链接)特定属性的更多详细信息,请参阅路由器支持 参考部分。
Slot 名称
描述
范围
first-text
“转到第一页”按钮内容。可选范围
Scope
prev-text
“转到上一页”按钮内容。可选范围
Scope
next-text
“转到下一页”按钮内容。可选范围
Scope
last-text
“转到最后一页”按钮内容。可选范围
Scope
ellipsis-text
“…”指示器内容。未限定范围
page
页码按钮内容。始终限定范围
Scope
事件
参数
描述
input
page
- 所选页码(以1开头),如果找不到页,则为空
当页面通过用户交互或编程方式更改时
change
page
- 所选页码(从1开始)
当页面通过用户交互更改时
导入单个组件
可以通过以下命名导出将各个组件导入到项目中:
组成部分
命名导出
导入路径
<b-pagination-nav>
BPaginationNav
bootstrap-vue
例子:
import { BPaginationNav } from 'bootstrap-vue'
Vue.component('b-pagination-nav' , BPaginationNav)
作为Vue.js插件导入
这个插件包括上面列出的所有独立组件。插件还包括任何组件别名。
命名导出
导入路径
PaginationNavPlugin
bootstrap-vue
例子:
import { PaginationNavPlugin } from 'bootstrap-vue'
Vue.use(PaginationNavPlugin)