Пагинация листает однородные данные — список или таблицу. Для переключения между разделами интерфейса используйте CdsTabs, а для навигации по иерархии страниц — CdsBreadcrumbs.
Анатомия
Пагинация — ряд кнопок страниц со стрелками по краям. Кнопки первой и последней страницы появляются при show-first-last-page, поле быстрого перехода — при quick-jumper, а страницы между крайними и соседями текущей сворачиваются в многоточие.
Вариации
Количество страниц
Свойство length задаёт количество страниц, v-model хранит номер текущей. Когда фокус внутри пагинации, страницы листаются клавишами ← и →.
Видимые кнопки
Свойство total-visible ограничивает количество одновременно видимых кнопок — остальные страницы сворачиваются в многоточие (текст меняется свойством ellipsis). Без total-visible компонент сам считает, сколько кнопок помещается в контейнер, и сворачивает лишние.
Крайние страницы
Свойство show-first-last-page добавляет кнопки перехода к первой и последней странице. Значение only-first оставляет только кнопку первой страницы — удобно, когда общее число страниц неизвестно или считается приблизительно.
Быстрый переход
Свойство quick-jumper добавляет поле, в котором пользователь вводит номер страницы и попадает на неё по Enter или по потере фокуса. Подпись перед полем меняется свойством quick-jumper-label.
Заблокированное состояние
Свойство disabled блокирует всю навигацию — например, пока грузится текущая страница.
Слоты
Слоты заменяют стандартные кнопки, сохраняя логику переключения: каждый слот получает готовый обработчик onClick и состояние disabled.
| Слот | Описание |
|---|---|
item | Кнопка отдельной страницы; в props — всё для передачи кнопке |
first | Кнопка перехода на первую страницу |
prev | Кнопка перехода на предыдущую страницу |
next | Кнопка перехода на следующую страницу |
last | Кнопка перехода на последнюю страницу |
Рекомендации
Сценарии использования
Список с постраничным выводом
Классическая связка: список показывает срез данных текущей страницы, подпись «Показано 1–4 из 23» ориентирует в общем объёме, а total-visible="3" держит пагинацию компактной рядом со счётчиком.
Загрузка страниц с сервера
Когда данные приходят с сервера, следите за v-model (или событиями first / prev / next / last / quickJump) и запускайте запрос при смене страницы. На время запроса disabled блокирует пагинацию и защищает от лишних переключений.
Поиск со сбросом страницы
При фильтрации количество страниц пересчитывается, а текущая страница сбрасывается на первую — иначе пользователь может остаться на странице, которой больше нет. Когда результатов хватает на одну страницу, пагинация скрывается.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
activeColor | string | undefined | — | Цвет активной кнопки страницы |
ariaLabel | string | undefined | 'Навигация по страницам' | ARIA-метка корневого элемента навигации |
color | string | undefined | — | Цвет кнопок страниц |
currentPageAriaLabel | string | undefined | 'Текущая страница, страница {0}' | ARIA-метка текущей (активной) страницы. {0} заменяется номером страницы |
disabled | boolean | null | undefined | null | Заблокированное состояние |
ellipsis | string | undefined | '...' | Текст, отображаемый между страницами при их сокрытии |
firstAriaLabel | string | undefined | 'Первая страница' | ARIA-метка кнопки перехода на первую страницу |
firstIcon | IconValue | undefined | 'first-page' | Иконка кнопки перехода на первую страницу |
lastAriaLabel | string | undefined | 'Последняя страница' | ARIA-метка кнопки перехода на последнюю страницу |
lastIcon | IconValue | undefined | 'last-page' | Иконка кнопки перехода на последнюю страницу |
length | string | number | undefined | 1 | Количество страниц |
modelValue | number | undefined | (props) => props.start | Значение v-model — номер текущей страницы |
nextAriaLabel | string | undefined | 'Следующая страница' | ARIA-метка кнопки перехода на следующую страницу |
nextIcon | IconValue | undefined | 'chevron-right' | Иконка кнопки перехода на следующую страницу |
pageAriaLabel | string | undefined | 'Перейти к странице {0}' | ARIA-метка кнопки страницы. {0} заменяется номером страницы |
prevIcon | IconValue | undefined | 'chevron-left' | Иконка кнопки перехода на предыдущую страницу |
previousAriaLabel | string | undefined | 'Предыдущая страница' | ARIA-метка кнопки перехода на предыдущую страницу |
quickJumper | boolean | undefined | false | Отображение поля быстрого перехода к странице |
quickJumperLabel | string | undefined | 'Перейти к странице' | Текст-подпись перед полем быстрого перехода к странице |
showFirstLastPage | boolean | "only-first" | undefined | false | Отображение кнопок перехода на первую/последнюю страницу. 'only-first' — только на первую |
start | string | number | undefined | 1 | Начальная страница |
tag | string | JSXComponent<any> | undefined | 'nav' | Пользовательский HTML-тег для отображения |
theme | string | undefined | — | Тема компонента |
totalVisible | string | number | undefined | — | Количество одновременно видимых кнопок страниц |
События
| Имя | Тип | Описание |
|---|---|---|
first | [value: number] | Событие перехода на первую страницу |
last | [value: number] | Событие перехода на последнюю страницу |
next | [value: number] | Событие перехода на следующую страницу |
prev | [value: number] | Событие перехода на предыдущую страницу |
quickJump | [value: number] | Событие перехода с помощью поля быстрого перехода |
update:modelValue | [value: number] | Событие изменения значения v-model |
Слоты
| Имя | Тип | Описание |
|---|---|---|
first | CdsPaginationControlSlot | Слот кнопки перехода на первую страницу |
item | CdsPaginationItemSlot | Слот кнопки отдельной страницы |
last | CdsPaginationControlSlot | Слот кнопки перехода на последнюю страницу |
next | CdsPaginationControlSlot | Слот кнопки перехода на следующую страницу |
prev | CdsPaginationControlSlot | Слот кнопки перехода на предыдущую страницу |
Exposed
| Имя | Тип | Описание |
|---|---|---|
setFirst | () => void | Переходит на первую страницу. |
setLast | () => void | Переходит на последнюю страницу. |
setNext | () => void | Переходит на следующую страницу. |
setPrev | () => void | Переходит на предыдущую страницу. |