Pagination

PaginationGitHub
一个用于在页面之间导航的按钮或链接列表。

用法

使用 default-page 属性或 v-model:page 指令来控制当前页。

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" :total="100" />
</template>
Pagination 组件使用了一些 Button 来显示页面,使用color, variant尺寸属性来设置它们的样式。

总数

使用 total 属性设置列表中项目的总数。

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" :total="100" />
</template>

每页项数

使用 items-per-page 属性设置每页的项数。默认为 10

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" :items-per-page="20" :total="100" />
</template>

相邻页数

使用 sibling-count 属性设置要显示的相邻页数。默认为 2

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" :sibling-count="1" :total="100" />
</template>

显示边界

使用 show-edges 属性始终显示省略号、第一页和最后一页。默认为 false

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" show-edges :sibling-count="1" :total="100" />
</template>

显示控件

使用 show-controls 属性显示第一页、上一页、下一页和最后一页按钮。默认为 true

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" :show-controls="false" show-edges :total="100" />
</template>

颜色

使用 color 属性设置非活动控件的颜色。默认为 neutral

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" color="primary" :total="100" />
</template>

变体

使用 variant 属性设置非活动控件的变体。默认为 outline

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" color="neutral" variant="subtle" :total="100" />
</template>

活动颜色

使用 active-color 属性设置活动控件的颜色。默认为 primary

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" active-color="neutral" :total="100" />
</template>

活动变体

使用 active-variant 属性设置活动控件的变体。默认为 solid

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" active-color="primary" active-variant="subtle" :total="100" />
</template>

尺寸

使用 size 属性设置控件的大小。默认为 md

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" size="xl" :total="100" />
</template>

禁用

使用 disabled 属性禁用分页控件。

<script setup lang="ts">
const page = ref(5)
</script>

<template>
  <UPagination v-model:page="page" :total="100" disabled />
</template>

示例

使用 to 属性将按钮转换为链接。传递一个接收页码并返回路由目标的函数。

<script setup lang="ts">
const page = ref(5)

function to(page: number) {
  return {
    query: {
      page
    },
    hash: '#with-links'
  }
}
</script>

<template>
  <UPagination v-model:page="page" :total="100" :to="to" :sibling-count="1" show-edges />
</template>
在此示例中,我们添加了 #with-links 哈希,以避免页面顶部跳转。

API

属性

属性默认值类型
as

'div'

any

此组件应渲染为的元素或组件。

firstIcon

appConfig.ui.icons.chevronDoubleLeft

字符串 | 对象

用于第一页控件的图标。

prevIcon

appConfig.ui.icons.chevronLeft

字符串 | 对象

用于上一页控件的图标。

nextIcon

appConfig.ui.icons.chevronRight

字符串 | 对象

用于下一页控件的图标。

lastIcon

appConfig.ui.icons.chevronDoubleRight

字符串 | 对象

用于最后一页控件的图标。

ellipsisIcon

appConfig.ui.icons.ellipsis

字符串 | 对象

用于省略号控件的图标。

color

'neutral'

"error" | "primary" | "secondary" | "success" | "info" | "warning" | "neutral"

分页控件的颜色。

variant

'outline'

"link" | "solid" | "outline" | "soft" | "subtle" | "ghost"

分页控件的变体。

activeColor

'主要'

"error" | "primary" | "secondary" | "success" | "info" | "warning" | "neutral"

活动分页控件的颜色。

activeVariant

'solid'

"link" | "solid" | "outline" | "soft" | "subtle" | "ghost"

活动分页控件的变体。

showControls

true

boolean

是否显示第一页、上一页、下一页和最后一页控件。

尺寸

"xs" | "sm" | "md" | "lg" | "xl"

过渡到

(page: number): string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric

用于渲染页面控件为链接的函数。

disabled

boolean

当设置为 true 时,阻止用户与项目交互

页码

number

当前页面的受控值。可以作为 v-model:page 绑定。

defaultPage

number

初始渲染时应激活的页面的值。

当您不需要控制值状态时使用。

itemsPerPage

10

number

每页项数

showEdges

false

boolean

当设置为 true 时,始终显示第一页、最后一页和省略号

siblingCount

2

number

当前页周围应显示的相邻页数

总数

0

number

列表中的项目数

ui

{ root?: ClassNameValue; list?: ClassNameValue; ellipsis?: ClassNameValue; label?: ClassNameValue; first?: ClassNameValue; prev?: ClassNameValue; item?: ClassNameValue; next?: ClassNameValue; last?: ClassNameValue; }

插槽

插槽类型
first

{}

prev

{}

next

{}

last

{}

ellipsis

{}

item

{ page: number; pageCount: number; item:{ type: "ellipsis"; } |{ type: "page"; value: number; }; index: number; }

事件

事件类型
update:page

[value: number]

主题

app.config.ts
export default defineAppConfig({
  ui: {
    pagination: {
      slots: {
        root: '',
        list: 'flex items-center gap-1',
        ellipsis: 'pointer-events-none',
        label: 'min-w-5 text-center',
        first: '',
        prev: '',
        item: '',
        next: '',
        last: ''
      }
    }
  }
})
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'

export default defineConfig({
  plugins: [
    vue(),
    ui({
      ui: {
        pagination: {
          slots: {
            root: '',
            list: 'flex items-center gap-1',
            ellipsis: 'pointer-events-none',
            label: 'min-w-5 text-center',
            first: '',
            prev: '',
            item: '',
            next: '',
            last: ''
          }
        }
      }
    })
  ]
})

更新日志

62f64— fix: make ellipsis non-interactive (#5081)

61b60— 功能:允许传递组件而不是名称 (#4766)

5cb65— 特性:导入 @nuxt/ui-pro 组件

4dd56— fix: match default button size (#4350)

e6e51— fix:class 应该优先于 ui 属性

39c86— fix:@nuxt/module-builder 升级后重构类型(#3855)