Компонент Pagination в библиотеке Naive UI используется для организации постраничного отображения данных. Он обеспечивает управление количеством отображаемых элементов на странице и навигацию между страницами. Основные свойства компонента позволяют полностью контролировать поведение пагинации, включая выбор размера страницы, отображение текущей страницы, настройку кнопок навигации и адаптивность под разные интерфейсы.
import { NPagination } from 'naive-ui'
Базовая структура компонента выглядит следующим образом:
<template>
<n-pagination v-model:page="currentPage" :page-count="10" />
</template>
<script setup>
import { ref } from 'vue'
const currentPage = ref(1)
</script>
Здесь v-model:page связывает текущую страницу с
переменной currentPage, а page-count задаёт
общее количество страниц.
v-model:page для двустороннего связывания.[10, 20, 50, 100].Компонент поддерживает несколько событий, которые важны для взаимодействия с внешним состоянием:
Пример использования событий:
<n-pagination
v-model:page="currentPage"
:page-count="20"
@update:page="handlePageChange"
@update:page-size="handleSizeChange"
/>
<script setup>
const handlePageChange = (page) => {
console.log('Текущая страница:', page)
}
const handleSizeChange = (size) => {
console.log('Новый размер страницы:', size)
}
</script>
Naive UI предоставляет несколько способов визуальной настройки пагинации:
Пример компактного варианта:
<n-pagination v-model:page="currentPage" :page-count="15" simple round />
Pagination чаще всего используется совместно с таблицами или списками
данных. Для динамического обновления данных можно использовать
вычисляемые свойства или отслеживать изменения
currentPage:
<template>
<n-pagination v-model:page="currentPage" :page-count="totalPages" />
<ul>
<li v-for="item in pagedData" :key="item.id">{{ item.name }}</li>
</ul>
</template>
<script setup>
import { ref, computed } from 'vue'
const currentPage = ref(1)
const pageSize = ref(10)
const items = ref([...Array(100).keys()].map(i => ({ id: i, name: `Item ${i}` })))
const totalPages = computed(() => Math.ceil(items.value.length / pageSize.value))
const pagedData = computed(() => {
const start = (currentPage.value - 1) * pageSize.value
return items.value.slice(start, start + pageSize.value)
})
</script>
simple
и mini позволяют адаптировать компонент под мобильные
устройства без потери функциональности.prev,
next и page слоты дают полный контроль над
визуальным отображением.currentPage и pageSize может инициировать
запросы к API, что позволяет обрабатывать большие объемы данных без
загрузки всего массива.<script setup>
import { ref, watch } from 'vue'
const currentPage = ref(1)
const pageSize = ref(20)
watch([currentPage, pageSize], ([page, size]) => {
fetchDataFromServer(page, size)
})
</script>
Использование этих возможностей делает компонент Pagination гибким инструментом для построения сложных интерфейсов с большими объемами данных, сохраняя при этом удобство пользователя и высокую производительность.