Компонент v-pagination в Vuetify представляет собой инструмент для организации навигации по страницам большого объема данных, таких как таблицы, списки или каталоги. Он обеспечивает пользователю удобный интерфейс для перехода между страницами и позволяет гибко управлять отображением элементов на экране.
Базовое использование включает подключение компонента и привязку
значения текущей страницы через директиву v-model:
<v-pagination
v-model="currentPage"
:length="totalPages"
:total-visible="7"
/>
v-model связывает текущую страницу с переменной в
состоянии компонента.length определяет общее количество страниц.total-visible задает количество видимых кнопок страниц,
остальные будут скрыты с использованием многоточий.v-pagination поддерживает стилизацию через стандартные props Vuetify:
Пример с кастомизацией:
<v-pagination
v-model="currentPage"
:length="20"
color="deep-purple accent-4"
background-color="grey lighten-3"
rounded
/>
Для динамического отображения страниц часто используется реактивное вычисление количества страниц на основе длины данных:
computed: {
totalPages() {
return Math.ceil(this.items.length / this.itemsPerPage);
},
paginatedItems() {
const start = (this.currentPage - 1) * this.itemsPerPage;
const end = start + this.itemsPerPage;
return this.items.slice(start, end);
}
}
totalPages автоматически пересчитывает количество
страниц при изменении данных.paginatedItems возвращает только те элементы, которые
должны отображаться на текущей странице.Компонент предоставляет возможность включать кнопки previous и next через props:
<v-pagination
v-model="currentPage"
:length="10"
prev-icon="mdi-chevron-left"
next-icon="mdi-chevron-right"
/>
prev-icon и next-icon позволяют задать
собственные иконки для навигации.v-pagination эмиттирует события, которые помогают реагировать на изменения страницы:
@input, используется в Vuetify 3 для
привязки v-model.Пример:
<v-pagination
v-model="currentPage"
:length="15"
@update:model-value="onPageChange"
/>
methods: {
onPageChange(newPage) {
console.log('Текущая страница:', newPage);
}
}
Пример полной настройки:
<v-pagination
v-model="currentPage"
:length="50"
:total-visible="5"
first-icon="mdi-page-first"
last-icon="mdi-page-last"
prev-icon="mdi-chevron-left"
next-icon="mdi-chevron-right"
color="indigo"
background-color="grey lighten-2"
rounded
/>
v-pagination идеально сочетается с компонентами v-data-table и v-list для управления большими наборами данных. Реактивное обновление массива отображаемых элементов позволяет динамически менять содержимое таблицы при переходе между страницами.
<v-data-table
:items="paginatedItems"
:headers="headers"
/>
<v-pagination
v-model="currentPage"
:length="totalPages"
/>
Такое сочетание обеспечивает плавную и удобную навигацию без перезагрузки страницы и лишних запросов, если данные уже находятся на клиенте.
v-model обеспечивает
реактивное управление текущей страницей.