Skip to content

Pagination ​

Navigate through pages of content.

vue
<script setup lang="ts">
import { ref } from 'vue'
import { VxPagination } from 'veloxui'

const page = ref(1)
</script>

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

More Pages ​

When there are many pages, ellipsis buttons appear. Click them to jump multiple pages.

vue
<VxPagination v-model="page" :total="500" />

With Total & Jumper ​

Use the layout prop to control which parts are shown and their order.

vue
<VxPagination
  v-model="page"
  :total="200"
  :layout="['total', 'prev', 'pager', 'next', 'jumper']"
/>

Page Size Selector ​

Add sizes to the layout and use v-model:pageSize to control items per page.

vue
<script setup lang="ts">
import { ref } from 'vue'

const page = ref(1)
const pageSize = ref(10)
</script>

<template>
  <VxPagination
    v-model="page"
    v-model:pageSize="pageSize"
    :total="500"
    :layout="['total', 'sizes', 'prev', 'pager', 'next', 'jumper']"
  />
</template>

Simple Mode ​

A compact pagination with prev/next buttons and page indicator.

vue
<VxPagination v-model="page" :total="500" simple />

Simple with Page Size ​

vue
<VxPagination v-model="page" v-model:pageSize="pageSize" :total="500" simple :layout="['sizes']" />

Slider Mode ​

A sliding window of page buttons. Click next/prev and the window slides along.

vue
<VxPagination v-model="page" :total="200" slider />

Slider with Visible Pages ​

Control how many page buttons are visible with visiblePages.

vue
<VxPagination v-model="page" :total="200" slider :visible-pages="3" />
<VxPagination v-model="page" :total="200" slider :visible-pages="5" />
<VxPagination v-model="page" :total="200" slider :visible-pages="7" />

Custom Page Format ​

Use pageFormat to customize how page numbers are displayed. Works in both default and slider modes.

vue
<script setup lang="ts">
import { ref } from 'vue'

const page = ref(1)

function padPage(page: number) {
  return String(page).padStart(2, '0')
}
</script>

<template>
  <VxPagination v-model="page" :total="200" :page-format="padPage" />
  <VxPagination v-model="page" :total="200" slider :visible-pages="5" :page-format="padPage" />
</template>

Custom Prev/Next Buttons ​

Use #prev and #next slots to customize the navigation buttons.

vue
<VxPagination v-model="page" :total="200">
  <template #prev>Prev</template>
  <template #next>Next</template>
</VxPagination>

Custom Page Slot ​

Use the #page slot for full control over each page button's content.

vue
<VxPagination v-model="page" :total="100">
  <template #page="{ page }">
    <span style="font-family: monospace;">[ {{ page }} ]</span>
  </template>
</VxPagination>

Sizes ​

vue
<VxPagination v-model="page" :total="200" size="sm" />
<VxPagination v-model="page" :total="200" />
<VxPagination v-model="page" :total="200" size="lg" />

Disabled ​

vue
<VxPagination v-model="page" :total="100" disabled />

Hide on Single Page ​

When there's only one page, the pagination hides automatically.

Nothing above — only 1 page
vue
<VxPagination v-model="page" :total="5" hide-on-single-page />

Custom Pager Count ​

Control how many page buttons are visible with pagerCount (must be odd, between 5 and 21).

vue
<VxPagination v-model="page" :total="1000" :pager-count="5" />

Full Example ​

vue
<VxPagination
  v-model="page"
  v-model:pageSize="pageSize"
  :total="1000"
  :layout="['total', 'sizes', 'prev', 'pager', 'next', 'jumper']"
  :page-sizes="[10, 20, 50, 100]"
/>

API ​

Props ​

PropTypeDefaultDescription
modelValuenumber1Current page number
totalnumber0Total number of items
pageSizenumber10Items per page
pageSizesnumber[][10, 20, 50, 100]Options for page size selector
pagerCountnumber7Max visible page buttons (odd, 5-21)
layoutstring[]['prev', 'pager', 'next']Layout parts: total, sizes, prev, pager, next, jumper
size'sm' | 'default' | 'lg''default'Component size
disabledbooleanfalseDisable the pagination
hideOnSinglePagebooleanfalseHide when there is only one page
simplebooleanfalseSimple mode: prev/next with page indicator
sliderbooleanfalseSlider mode: sliding window of pages
visiblePagesnumber3Number of visible pages in slider mode
pageFormat(page: number) => string—Custom page number formatter

Events ​

EventPayloadDescription
update:modelValuenumberPage changed
changenumberPage changed
update:pageSizenumberPage size changed
size-changenumberPage size changed

Slots ​

SlotPropsDescription
prev—Custom prev button content
next—Custom next button content
page{ page: number }Custom page button content