分页
功能
- 启用快速访问第一页或最后一页
- 启用常时显示边缘,或不显示
安装
从命令行安装此组件。
$ npm add reka-ui结构
导入所有部分并将其组合。
<script setup>
import { PaginationEllipsis, PaginationFirst, PaginationLast, PaginationList, PaginationListItem, PaginationNext, PaginationPrev, PaginationRoot } from 'reka-ui'
</script>
<template>
<PaginationRoot>
<PaginationList v-slot="{ items }">
<PaginationFirst />
<PaginationPrev />
<template v-for="(page, index) in items">
<PaginationListItem
v-if="page.type === 'page'"
:key="index"
/>
<PaginationEllipsis
v-else
:key="page.type"
:index="index"
>
…
</PaginationEllipsis>
</template>
<PaginationNext />
<PaginationLast />
</PaginationList>
</PaginationRoot>
</template>API 参考
根
包含所有分页组件部分。
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'nav' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 | |
defaultPage | 1 | 数字初始渲染时应激活的页面值。 当您不需要控制值状态时使用。 |
disabled | 布尔值当为 | |
itemsPerPage* | 数字每页项数 | |
page | 数字当前页的受控值。可绑定为 | |
showEdges | false | 布尔值当 |
siblingCount | 2 | 数字当前页周围应显示的相邻页码数量 |
total | 0 | 数字列表中的项数 |
| 事件触发 | 载荷 |
|---|---|
update:page | [value: number]当页码值改变时调用的事件处理函数 |
| 插槽(默认) | 载荷 |
|---|---|
page | 数字当前页面状态 |
pageCount | 数字总页数 |
列表
用于显示页码列表。它也使分页功能可供辅助技术访问。
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'div' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
| 插槽(默认) | 载荷 |
|---|---|
items | { type: 'ellipsis'; } | { type: 'page'; value: number; }页面项 |
项
用于渲染更改当前页面的按钮。
| 数据属性 | 值 |
|---|---|
[data-selected] | "true" | "" |
[data-type] | "page" |
省略号
当列表很长,且 siblingCount 值设置得很小、showEdges 设置为 true 时的占位符元素。
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'div' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
| 数据属性 | 值 |
|---|---|
[data-type] | "ellipsis" |
首页
将页码值设置为 1 的触发器
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'button' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
上一页
将页码值设置为上一页的触发器
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'button' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
下一页
将页码值设置为下一页的触发器
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'button' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
尾页
将页码值设置为最后一页的触发器
| 属性 | 默认 | 类型 |
|---|---|---|
as | 'button' | AsTag | Component此组件应渲染为的元素或组件。可通过 |
asChild | 布尔值更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。 阅读我们的 组合指南了解更多详情。 |
示例
带省略号
您可以添加 PaginationEllipsis 作为更多前后项的视觉提示。
<script setup lang="ts">
import { PaginationEllipsis, PaginationList, PaginationListItem, PaginationRoot } from 'reka-ui'
</script>
<template>
<PaginationRoot>
<PaginationList v-slot="{ items }">
<template v-for="(page, index) in items">
<PaginationListItem
v-if="page.type === 'page'"
:key="index"
/>
<PaginationEllipsis
v-else
:key="page.type"
:index="index"
>
…
</PaginationEllipsis>
</template>
</PaginationList>
</PaginationRoot>
</template>带首页/尾页按钮
您可以添加 PaginationFirst 允许用户导航到第一页,或 PaginationLast 导航到最后一页。
<script setup lang="ts">
import { PaginationFirst, PaginationLast, PaginationList, PaginationListItem, PaginationRoot } from 'reka-ui'
</script>
<template>
<PaginationRoot>
<PaginationList>
<PaginationFirst />
...
<PaginationLast />
</PaginationList>
</PaginationRoot>
</template>编程式控制页面
您可以通过传入响应式值来控制当前页面。
<script setup lang="ts">
import { PaginationRoot } from 'reka-ui'
import { ref } from 'vue'
import { Select } from './custom-select'
const currentPage = ref(1)
</script>
<template>
<Select v-model="currentPage" />
<PaginationRoot v-model:page="currentPage">
...
</PaginationRoot>
</template>键盘交互
| 键 | 描述 |
|---|---|
Tab | 将焦点移动到下一个可聚焦元素。 |
空格键 |
当焦点在任何触发器上时,触发选中页面或箭头导航 |
回车键 |
当焦点在任何触发器上时,触发选中页面或箭头导航 |
