Pagination

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

用法

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

分页组件使用一些 Button 来显示页面,使用color, variant尺寸props 来设置它们的样式。

总数

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

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

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

每页项目数

使用 items-per-page prop 设置每页显示的项目数。默认为 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 prop 设置要显示的兄弟页码数。默认为 2

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

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

显示边缘

使用 show-edges prop 始终显示省略号、第一页和最后一页。默认为 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 prop 显示第一页、上一页、下一页和最后一页按钮。默认为 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 prop 设置非活动控制的颜色。默认为 neutral

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

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

变体

使用 variant prop 设置非活动控制的变体。默认为 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 prop 设置活动控制的颜色。默认为 primary

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

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

活动变体

使用 active-variant prop 设置活动控制的变体。默认为 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 prop 设置控制的大小。默认为 md

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

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

禁用

使用 disabled prop 禁用分页控制。

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

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

示例

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

<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 hash 以避免跳转到页面顶部。

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'

分页控件的颜色。

variant

'outline'

分页控件的变体。

activeColor

'主要'

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

活动分页控件的颜色。

activeVariant

'solid'

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

活动分页控件的变体。

showControls

true

boolean

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

尺寸

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

过渡到

(page: number): string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric

一个将页面控制渲染为链接的函数。

defaultPage

number

初始渲染时应处于活动状态的页码值。

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

disabled

boolean

true 时,阻止用户与项目交互

itemsPerPage

10

number

每页项目数

页码

number

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

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

{ ui: object; }

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: ''
          }
        }
      }
    })
  ]
})

更新日志

63c0a— feat: 在使用的 slot prop 中暴露 ui (#5207)

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)