Skip to content

MePagination

Componente de paginação com navegação por páginas, ellipsis automático e seletor de linhas por página.

Playground

Importação

vue
<script>
import { MePagination } from '@/components/global/utils/export/index'
</script>

Uso Básico

O componente é controlado externamente: o pai mantém currentPage e atualiza via evento @page-change.

1 - 10 de 100
vue
<script setup>
import { ref } from 'vue'
const currentPage = ref(1)
const rowsPerPage = ref(10)
</script>

<template>
  <MePagination
    :current-page="currentPage"
    :total-items="100"
    :rows-per-page="rowsPerPage"
    @page-change="currentPage = $event"
    @rows-per-page-change="rowsPerPage = $event"
  />
</template>

Sem Seletor de Linhas

Use show-rows-per-page-select="false" para exibir apenas os botões de navegação.

vue
<MePagination
  :current-page="currentPage"
  :total-items="50"
  :show-rows-per-page-select="false"
  @page-change="currentPage = $event"
/>

Ellipsis Automático

Quando o total de páginas ultrapassa 7, o componente aplica ellipsis (...) automaticamente para condensar a barra de navegação.

1 - 10 de 500
vue
<MePagination
  :current-page="currentPage"
  :total-items="500"
  :rows-per-page="rowsPerPage"
  @page-change="currentPage = $event"
  @rows-per-page-change="rowsPerPage = $event"
/>

Lógica do ellipsis

  • Início (currentPage ≤ 3): [1, 2, 3, 4, 5, ..., N]
  • Fim (currentPage ≥ N - 3): [1, ..., N-4, N-3, N-2, N-1, N]
  • Meio: [1, ..., P-1, P, P+1, ..., N]

Os botões ... são desabilitados e não emitem page-change.

Opções de Linhas Customizadas

Controle quais opções aparecem no seletor via rows-per-page-options.

1 - 5 de 200
vue
<MePagination
  :current-page="currentPage"
  :total-items="200"
  :rows-per-page="rowsPerPage"
  :rows-per-page-options="[5, 15, 30]"
  @page-change="currentPage = $event"
  @rows-per-page-change="rowsPerPage = $event"
/>

API

Props

PropTipoPadrãoDescrição
current-pagenumber1Página atual (1-based). Controla o botão ativo e o cálculo do intervalo exibido.
total-itemsnumber0Total de itens da lista. Usado para calcular o número de páginas.
rows-per-pagenumber10Número de linhas por página. Sincronizado com o select interno via watch.
rows-per-page-optionsnumber[][10, 20, 50, 100]Opções disponíveis no seletor de linhas por página.
show-rows-per-page-selectbooleantrueExibe o bloco com seletor de linhas e contador de registros.

Eventos

EventoPayloadDescrição
page-changenumberEmitido ao clicar em um botão de página válido. Payload é o número da página selecionada.
rows-per-page-changenumberEmitido ao alterar o seletor de linhas por página. Payload é o novo valor.

Acessibilidade

  • Botões de página são elementos <button> nativos, acessíveis por teclado (Tab, Enter)
  • Botões desabilitados (anterior na primeira página, próximo na última) recebem o atributo disabled
  • Botões de ellipsis são desabilitados e não interagem com o teclado

Controle externo

O MePagination é um componente controlado: o pai é responsável por manter currentPage e atualizar seu valor ao receber o evento page-change. O componente não altera currentPage internamente.