Skip to content

Pagination ​

Navigation entre les pages d'une liste ou d'un tableau. Le nombre de boutons reste constant (des ellipses remplacent les pages éloignées) : la barre ne change pas de largeur d'une page à l'autre.

Exemples d'utilisation ​

Utilisation de base ​

À partir du nombre total d'éléments (total) et de la taille de page (pageSize, 10 par défaut), ou directement avec pageCount.

Page 1

vue
<script setup>
import { ref } from 'vue'

const page = ref(1)
</script>

<template>
  <SuPagination v-model="page" :total="200" :page-size="10" />
</template>

Première et dernière page ​

vue
<SuPagination v-model="page" :page-count="20" show-edges />

Pages voisines et extrémités ​

siblings règle le nombre de pages de part et d'autre de la page courante, boundaries le nombre de pages toujours visibles au début et à la fin.

vue
<SuPagination v-model="page" :page-count="20" :siblings="2" :boundaries="2" />

Tailles ​

vue
<SuPagination v-model="page" :page-count="8" size="sm" />

API ​

Props ​

PropTypeDéfautDescription
modelValuenumber1Page courante, de 1 à n (v-model)
totalnumber-Nombre total d'éléments
pageSizenumber10Éléments par page
pageCountnumber-Nombre de pages, prioritaire sur total / pageSize
siblingsnumber1Pages de part et d'autre de la page courante
boundariesnumber1Pages toujours affichées au début et à la fin
showEdgesbooleanfalseBoutons première / dernière page
size'sm' | 'md' | 'lg''md'Taille
disabledbooleanfalseDésactive la pagination
ariaLabelstring'Pagination'Nom de la navigation
previousLabel / nextLabelstring'Page précédente' / 'Page suivante'Noms des boutons précédent / suivant
firstLabel / lastLabelstring'Première page' / 'Dernière page'Noms des boutons d'extrémité
pageLabel(page: number) => string'Page {page}'Nom d'un bouton de page

Événements ​

ÉvénementPayloadDescription
update:modelValuenumberNouvelle page (v-model)
changenumberChangement de page par l'utilisateur

Le calcul des pages est exporté séparément, pour une pagination sur mesure : import { getPaginationItems } from '@surgeui/ds-vue', puis getPaginationItems({ page, count, siblings, boundaries }) renvoie les numéros et les ellipses ('ellipsis-start', 'ellipsis-end').

Accessibilité ​

  • <nav aria-label="Pagination"> contenant une liste ; la page courante porte aria-current="page".
  • Chaque bouton de page est nommé « Page 3 » : le nom contient le chiffre affiché (WCAG 2.5.3).
  • À la première ou la dernière page, précédent et suivant restent focusables avec aria-disabled="true" : le focus n'est pas perdu quand le bouton devient inactif.
  • Les ellipses sont masquées aux lecteurs d'écran.
  • En RTL, les chevrons sont retournés.

Publié sous licence MIT.