mirror of
https://github.com/ArthurDanjou/ui.git
synced 2026-01-18 22:11:43 +01:00
157 lines
3.0 KiB
Markdown
157 lines
3.0 KiB
Markdown
---
|
|
description: Add a pagination to handle pages.
|
|
links:
|
|
- label: GitHub
|
|
icon: i-simple-icons-github
|
|
to: https://github.com/nuxt/ui/blob/dev/src/runtime/components/navigation/Pagination.vue
|
|
---
|
|
|
|
## Usage
|
|
|
|
Use a `v-model` to get a reactive page alongside a `total` which represents the total of items. You can also use the `page-count` prop to define the number of items per page which defaults to `10`.
|
|
|
|
::component-example
|
|
#default
|
|
:pagination-example-basic
|
|
|
|
#code
|
|
```vue
|
|
<script setup>
|
|
const page = ref(1)
|
|
const items = ref(Array(55))
|
|
</script>
|
|
|
|
<template>
|
|
<UPagination v-model="page" :page-count="5" :total="items.length" />
|
|
</template>
|
|
```
|
|
::
|
|
|
|
### Max
|
|
|
|
Use the `max` prop to set a maximum of displayed pages. Defaults to `7`, being the minimum.
|
|
|
|
::component-card
|
|
---
|
|
baseProps:
|
|
modelValue: 1
|
|
props:
|
|
max: 5
|
|
pageCount: 5
|
|
total: 100
|
|
excludedProps:
|
|
- pageCount
|
|
- total
|
|
---
|
|
::
|
|
|
|
### Size
|
|
|
|
Use the `size` prop to change the size of the buttons.
|
|
|
|
::component-card
|
|
---
|
|
baseProps:
|
|
modelValue: 1
|
|
total: 100
|
|
props:
|
|
size: 'sm'
|
|
ui:
|
|
size:
|
|
2xs: true
|
|
xs: true
|
|
sm: true
|
|
md: true
|
|
lg: true
|
|
xl: true
|
|
---
|
|
::
|
|
|
|
### Active / Inactive
|
|
|
|
Use the `active-button` and `inactive-button` props to customize the active and inactive buttons of the Pagination.
|
|
|
|
::component-card
|
|
---
|
|
baseProps:
|
|
modelValue: 1
|
|
total: 100
|
|
props:
|
|
activeButton:
|
|
variant: 'outline'
|
|
inactiveButton:
|
|
color: 'gray'
|
|
excludedProps:
|
|
- activeButton
|
|
- inactiveButton
|
|
---
|
|
::
|
|
|
|
### Prev / Next
|
|
|
|
Use the `prev-button` and `next-button` props to customize the prev and next buttons of the Pagination.
|
|
|
|
::component-card
|
|
---
|
|
baseProps:
|
|
modelValue: 1
|
|
total: 100
|
|
props:
|
|
prevButton:
|
|
icon: 'i-heroicons-arrow-small-left-20-solid'
|
|
label: Prev
|
|
color: 'gray'
|
|
nextButton:
|
|
icon: 'i-heroicons-arrow-small-right-20-solid'
|
|
trailing: true
|
|
label: Next
|
|
color: 'gray'
|
|
excludedProps:
|
|
- prevButton
|
|
- nextButton
|
|
---
|
|
::
|
|
|
|
## Slots
|
|
|
|
### `prev` / `next`
|
|
|
|
Use the `#prev` and `#next` slots to set the content of the previous and next buttons.
|
|
|
|
::component-example
|
|
#default
|
|
:pagination-example-prev-next-slots
|
|
|
|
#code
|
|
```vue
|
|
<script setup>
|
|
const page = ref(1);
|
|
const items = ref(Array(55));
|
|
</script>
|
|
|
|
<template>
|
|
<UPagination v-model="page" :total="items.length" :ui="{ rounded: 'first-of-type:rounded-s-md last-of-type:rounded-e-md' }">
|
|
<template #prev="{ onClick }">
|
|
<UTooltip text="Previous page">
|
|
<UButton icon="i-heroicons-arrow-small-left-20-solid" color="primary" :ui="{ rounded: 'rounded-full' }" class="rtl:[&_span:first-child]:rotate-180 me-2" @click="onClick" />
|
|
</UTooltip>
|
|
</template>
|
|
|
|
<template #next="{ onClick }">
|
|
<UTooltip text="Next page">
|
|
<UButton icon="i-heroicons-arrow-small-right-20-solid" color="primary" :ui="{ rounded: 'rounded-full' }" class="rtl:[&_span:last-child]:rotate-180 ms-2" @click="onClick" />
|
|
</UTooltip>
|
|
</template>
|
|
</UPagination>
|
|
</template>
|
|
```
|
|
::
|
|
|
|
## Props
|
|
|
|
:component-props
|
|
|
|
## Preset
|
|
|
|
:component-preset
|