前端vue实现分页
Vue 分页实现方法
基础分页组件实现
创建一个可复用的分页组件,包含页码按钮、上一页/下一页等功能。组件需接收总数据量、当前页码等参数,通过事件触发页码变更。
<template>
<div class="pagination">
<button @click="changePage(currentPage - 1)" :disabled="currentPage === 1">上一页</button>
<button
v-for="page in pages"
:key="page"
@click="changePage(page)"
:class="{ active: page === currentPage }"
>
{{ page }}
</button>
<button @click="changePage(currentPage + 1)" :disabled="currentPage === totalPages">下一页</button>
</div>
</template>
<script>
export default {
props: {
totalItems: Number,
itemsPerPage: Number,
currentPage: Number
},
computed: {
totalPages() {
return Math.ceil(this.totalItems / this.itemsPerPage)
},
pages() {
const range = []
for (let i = 1; i <= this.totalPages; i++) {
range.push(i)
}
return range
}
},
methods: {
changePage(page) {
if (page >= 1 && page <= this.totalPages) {
this.$emit('page-changed', page)
}
}
}
}
</script>
结合API数据加载
在实际应用中通常需要从API获取分页数据,需处理异步请求和参数传递。
<script>
export default {
data() {
return {
items: [],
currentPage: 1,
totalItems: 0,
itemsPerPage: 10
}
},
mounted() {
this.fetchData()
},
methods: {
async fetchData() {
const response = await axios.get('/api/items', {
params: {
page: this.currentPage,
per_page: this.itemsPerPage
}
})
this.items = response.data.items
this.totalItems = response.data.total
},
handlePageChange(page) {
this.currentPage = page
this.fetchData()
}
}
}
</script>
高级分页优化
对于大数据量场景,可采用以下优化方案:

显示页码范围而非全部页码
computed: {
pages() {
const start = Math.max(1, this.currentPage - 2)
const end = Math.min(this.totalPages, this.currentPage + 2)
return Array.from({ length: end - start + 1 }, (_, i) => start + i)
}
}
添加省略号显示 在模板中添加条件渲染逻辑,当页码跨度较大时显示省略号。

滚动加载分页 适用于移动端,监听滚动事件实现无限加载。
window.addEventListener('scroll', () => {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight - 500) {
this.loadMore()
}
})
样式与交互优化
添加过渡动画和加载状态提升用户体验。
<template>
<div>
<transition-group name="fade" tag="div">
<div v-for="item in items" :key="item.id">
{{ item.name }}
</div>
</transition-group>
<div v-if="loading" class="loading-indicator">
加载中...
</div>
</div>
</template>
服务端分页注意事项
确保API支持分页参数,正确处理排序和筛选条件。典型REST API分页参数包括:
page: 当前页码limit: 每页数量sort: 排序字段filter: 筛选条件
性能优化技巧
- 使用keep-alive缓存分页组件
- 实现防抖处理快速翻页
- 预加载下一页数据
- 添加路由参数同步当前页码






