Skip to content

CdsPagination

Пагинация делит большой набор данных на страницы и помогает перейти к нужной: кнопки с номерами, стрелки «назад» и «вперёд», переход к первой и последней странице и поле быстрого перехода. Лишние номера сворачиваются в многоточие, а без явного ограничения количество кнопок подстраивается под ширину контейнера.

Storybook GitLab Figma
Покрытие тестами: 100% — хорошее покрытие
API в спеках
39 / 39 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
54 юнит · 0 браузерных
Известные баги
5 зафиксированы тестом it.fails
Покрытие кода
100% строк · 96.7% ветвей замер v4.0.0-alpha.13
A11y (axe)
8 рекомендаций в 11 историях замер v4.0.0-alpha.11

Пагинация листает однородные данные — список или таблицу. Для переключения между разделами интерфейса используйте CdsTabs, а для навигации по иерархии страниц — CdsBreadcrumbs.

Анатомия ​

Пагинация — ряд кнопок страниц со стрелками по краям. Кнопки первой и последней страницы появляются при show-first-last-page, поле быстрого перехода — при quick-jumper, а страницы между крайними и соседями текущей сворачиваются в многоточие.

Вариации ​

Количество страниц ​

Свойство length задаёт количество страниц, v-model хранит номер текущей. Когда фокус внутри пагинации, страницы листаются клавишами ← и →.

Sandbox Storybook

Видимые кнопки ​

Свойство total-visible ограничивает количество одновременно видимых кнопок — остальные страницы сворачиваются в многоточие (текст меняется свойством ellipsis). Без total-visible компонент сам считает, сколько кнопок помещается в контейнер, и сворачивает лишние.

Sandbox Storybook

Крайние страницы ​

Свойство show-first-last-page добавляет кнопки перехода к первой и последней странице. Значение only-first оставляет только кнопку первой страницы — удобно, когда общее число страниц неизвестно или считается приблизительно.

Sandbox Storybook

Быстрый переход ​

Свойство quick-jumper добавляет поле, в котором пользователь вводит номер страницы и попадает на неё по Enter или по потере фокуса. Подпись перед полем меняется свойством quick-jumper-label.

Sandbox Storybook

Заблокированное состояние ​

Свойство disabled блокирует всю навигацию — например, пока грузится текущая страница.

Sandbox Storybook

Слоты ​

Слоты заменяют стандартные кнопки, сохраняя логику переключения: каждый слот получает готовый обработчик onClick и состояние disabled.

СлотОписание
itemКнопка отдельной страницы; в props — всё для передачи кнопке
firstКнопка перехода на первую страницу
prevКнопка перехода на предыдущую страницу
nextКнопка перехода на следующую страницу
lastКнопка перехода на последнюю страницу
Sandbox Storybook

Рекомендации ​

Сценарии использования ​

Список с постраничным выводом ​

Классическая связка: список показывает срез данных текущей страницы, подпись «Показано 1–4 из 23» ориентирует в общем объёме, а total-visible="3" держит пагинацию компактной рядом со счётчиком.

Sandbox Storybook

Загрузка страниц с сервера ​

Когда данные приходят с сервера, следите за v-model (или событиями first / prev / next / last / quickJump) и запускайте запрос при смене страницы. На время запроса disabled блокирует пагинацию и защищает от лишних переключений.

Sandbox Storybook

Поиск со сбросом страницы ​

При фильтрации количество страниц пересчитывается, а текущая страница сбрасывается на первую — иначе пользователь может остаться на странице, которой больше нет. Когда результатов хватает на одну страницу, пагинация скрывается.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
activeColorstring | undefined—Цвет активной кнопки страницы
ariaLabelstring | undefined'Навигация по страницам'ARIA-метка корневого элемента навигации
colorstring | undefined—Цвет кнопок страниц
currentPageAriaLabelstring | undefined'Текущая страница, страница {0}'ARIA-метка текущей (активной) страницы. {0} заменяется номером страницы
disabledboolean | null | undefinednullЗаблокированное состояние
ellipsisstring | undefined'...'Текст, отображаемый между страницами при их сокрытии
firstAriaLabelstring | undefined'Первая страница'ARIA-метка кнопки перехода на первую страницу
firstIconIconValue | undefined'first-page'Иконка кнопки перехода на первую страницу
lastAriaLabelstring | undefined'Последняя страница'ARIA-метка кнопки перехода на последнюю страницу
lastIconIconValue | undefined'last-page'Иконка кнопки перехода на последнюю страницу
lengthstring | number | undefined1Количество страниц
modelValuenumber | undefined(props) => props.startЗначение v-model — номер текущей страницы
nextAriaLabelstring | undefined'Следующая страница'ARIA-метка кнопки перехода на следующую страницу
nextIconIconValue | undefined'chevron-right'Иконка кнопки перехода на следующую страницу
pageAriaLabelstring | undefined'Перейти к странице {0}'ARIA-метка кнопки страницы. {0} заменяется номером страницы
prevIconIconValue | undefined'chevron-left'Иконка кнопки перехода на предыдущую страницу
previousAriaLabelstring | undefined'Предыдущая страница'ARIA-метка кнопки перехода на предыдущую страницу
quickJumperboolean | undefinedfalseОтображение поля быстрого перехода к странице
quickJumperLabelstring | undefined'Перейти к странице'Текст-подпись перед полем быстрого перехода к странице
showFirstLastPageboolean | "only-first" | undefinedfalseОтображение кнопок перехода на первую/последнюю страницу. 'only-first' — только на первую
startstring | number | undefined1Начальная страница
tagstring | JSXComponent<any> | undefined'nav'Пользовательский HTML-тег для отображения
themestring | undefined—Тема компонента
totalVisiblestring | number | undefined—Количество одновременно видимых кнопок страниц

События

ИмяТипОписание
first[value: number]Событие перехода на первую страницу
last[value: number]Событие перехода на последнюю страницу
next[value: number]Событие перехода на следующую страницу
prev[value: number]Событие перехода на предыдущую страницу
quickJump[value: number]Событие перехода с помощью поля быстрого перехода
update:modelValue[value: number]Событие изменения значения v-model

Слоты

ИмяТипОписание
firstCdsPaginationControlSlotСлот кнопки перехода на первую страницу
itemCdsPaginationItemSlotСлот кнопки отдельной страницы
lastCdsPaginationControlSlotСлот кнопки перехода на последнюю страницу
nextCdsPaginationControlSlotСлот кнопки перехода на следующую страницу
prevCdsPaginationControlSlotСлот кнопки перехода на предыдущую страницу

Exposed

ИмяТипОписание
setFirst() => voidПереходит на первую страницу.
setLast() => voidПереходит на последнюю страницу.
setNext() => voidПереходит на следующую страницу.
setPrev() => voidПереходит на предыдущую страницу.