Skip to content

Paginator ​

CPaginator displays data in paged format and provides navigation between pages.

Basic ​

You must specify the rows and totalRecords properties to define the number of rows per page and the total number of records respectively.

vue
<template>
  <CPaginator :rows="10" :totalRecords="120" />
</template>

<script lang="ts" setup>
import { ref } from 'vue';
const currentPage = ref(0);
</script>

Size ​

You can define the size of the paginator using the size property.

vue
<template>
  <CPaginator :rows="10" :totalRecords="120" size="small" />
  <CPaginator :rows="10" :totalRecords="120" />
  <CPaginator :rows="10" :totalRecords="120" size="large"/>
</template>

Rows per page options ​

You can provide a set of options for the number of rows per page using the rows-per-page-options property. This will render a dropdown allowing users to select their preferred number of rows per page.

vue
<template>
  <CPaginator
      :rows="10"
      :totalRecords="120"
      :rows-per-page-options="[5,10,20,50]"
  />
</template>

Programmatic Page Navigation ​

You can programmatically navigate to a specific page using the setPage method available on the paginator component instance.

WARNING

The page index is zero-based, meaning that the first page is represented by 0.

vue
<template>
  <CPaginator
      :rows="10"
      :totalRecords="120"
      ref="paginator"
  />
</template>

<script lang="ts" setup>
import { onMounted, useTemplateRef } from 'vue';

const paginator = useTemplateRef('paginator');

onMounted(() => {
  paginator.value?.setPage(2);
});
</script>

Page State ​

When the state of the paginator changes (such as when the user navigates to a different page or changes the number of rows per page), a page event is emitted. You can listen to this event to update your data accordingly.

The PageState object contains the following properties:

  • first: Index of the first record in the current page.
  • rows: Number of rows per page.
  • page: Current page index (zero-based).
  • pageCount: Total number of pages.
vue
<template>
  <CPaginator
      :rows="10"
      :totalRecords="120"
      @page="state = $event"
  />
  <pre class="mt-4">{{ state }}</pre>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import { type PageState } from 'primevue/paginator'

const state = ref<PageState>();
</script>

Paginated Data ​

We provide a composable usePaginatedData to help you manage paginated data easily.

The first parameter is a Ref containing the full dataset, and the second parameter is a Ref for the PageState. The composable returns a Ref pageData containing only the data for the current page.

vue
<template>
  <CPaginator
      :rows="10"
      :totalRecords="120"
      @page="state = $event"
  />
  <ul class="list-disc">
    <li v-for="item in pageData" :key="item">{{ item }}</li>
  </ul>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import { type PageState } from 'primevue/paginator'

const state = ref<PageState>();

const numbers = ref<number[]>([]);
for (let i = 1; i <= 115; i++) {
  numbers.value.push(i);
}

const {pageData} = usePaginatedData(numbers, state)
</script>