vue page 实现分页
实现 Vue 分页功能
在 Vue 中实现分页功能可以通过自定义组件或使用第三方库完成。以下是两种常见的实现方式:
自定义分页组件
创建一个简单的分页组件,包含页码和导航按钮:

<template>
<div class="pagination">
<button @click="prevPage" :disabled="currentPage === 1">上一页</button>
<span v-for="page in pages" :key="page">
<button
@click="changePage(page)"
:class="{ active: currentPage === page }"
>
{{ page }}
</button>
</span>
<button @click="nextPage" :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) {
this.$emit('page-changed', page)
},
prevPage() {
if (this.currentPage > 1) {
this.changePage(this.currentPage - 1)
}
},
nextPage() {
if (this.currentPage < this.totalPages) {
this.changePage(this.currentPage + 1)
}
}
}
}
</script>
<style>
.pagination {
display: flex;
justify-content: center;
margin-top: 20px;
}
.pagination button {
margin: 0 5px;
padding: 5px 10px;
}
.pagination button.active {
background-color: #42b983;
color: white;
}
</style>
使用 Element UI 分页组件
如果项目中使用 Element UI,可以直接使用其分页组件:

<template>
<el-pagination
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-size="pageSize"
:total="total"
layout="prev, pager, next"
>
</el-pagination>
</template>
<script>
export default {
data() {
return {
currentPage: 1,
pageSize: 10,
total: 100
}
},
methods: {
handleCurrentChange(val) {
this.currentPage = val
// 这里可以添加获取新页数据的逻辑
}
}
}
</script>
数据分页处理
在实际应用中,通常需要结合 API 请求实现数据分页:
methods: {
fetchData(page = 1) {
axios.get(`/api/data?page=${page}&per_page=${this.itemsPerPage}`)
.then(response => {
this.items = response.data.items
this.totalItems = response.data.total
})
},
changePage(page) {
this.currentPage = page
this.fetchData(page)
}
}
客户端分页
如果数据量不大,可以在客户端进行分页处理:
computed: {
paginatedItems() {
const start = (this.currentPage - 1) * this.itemsPerPage
const end = start + this.itemsPerPage
return this.items.slice(start, end)
}
}
以上方法可以根据项目需求选择适合的实现方式。自定义组件灵活性高,适合特定设计要求;UI 库组件开发效率高,适合快速实现标准分页功能。






