vue实现表格分页显示
实现表格分页的基本思路
在Vue中实现表格分页显示,通常需要结合后端API或前端数据处理。核心逻辑包括:计算总页数、处理当前页数据、监听页码变化事件。

后端分页实现(推荐)
适用于数据量大的场景,通过API接口分页获取数据。

<template>
<div>
<table>
<thead><tr><th>ID</th><th>Name</th></tr></thead>
<tbody>
<tr v-for="item in tableData" :key="item.id">
<td>{{ item.id }}</td><td>{{ item.name }}</td>
</tr>
</tbody>
</table>
<el-pagination
@current-change="handlePageChange"
:current-page="currentPage"
:page-size="pageSize"
:total="total"
layout="prev, pager, next">
</el-pagination>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [],
currentPage: 1,
pageSize: 10,
total: 0
}
},
created() {
this.fetchData()
},
methods: {
fetchData() {
// 替换为实际API调用
axios.get('/api/data', {
params: {
page: this.currentPage,
size: this.pageSize
}
}).then(res => {
this.tableData = res.data.list
this.total = res.data.total
})
},
handlePageChange(page) {
this.currentPage = page
this.fetchData()
}
}
}
</script>
前端分页实现
适用于数据量较小的场景,所有数据一次性加载后在前端分页。
<template>
<div>
<table>
<thead><tr><th>ID</th><th>Name</th></tr></thead>
<tbody>
<tr v-for="item in paginatedData" :key="item.id">
<td>{{ item.id }}</td><td>{{ item.name }}</td>
</tr>
</tbody>
</table>
<div class="pagination">
<button @click="prevPage" :disabled="currentPage === 1">Previous</button>
<span>Page {{ currentPage }} of {{ totalPages }}</span>
<button @click="nextPage" :disabled="currentPage === totalPages">Next</button>
</div>
</div>
</template>
<script>
export default {
data() {
return {
allData: [], // 全部数据
currentPage: 1,
pageSize: 10
}
},
computed: {
totalPages() {
return Math.ceil(this.allData.length / this.pageSize)
},
paginatedData() {
const start = (this.currentPage - 1) * this.pageSize
const end = start + this.pageSize
return this.allData.slice(start, end)
}
},
methods: {
prevPage() {
if (this.currentPage > 1) this.currentPage--
},
nextPage() {
if (this.currentPage < this.totalPages) this.currentPage++
}
}
}
</script>
使用第三方组件库
Element UI、Ant Design Vue等组件库提供了现成的分页组件。
<template>
<div>
<el-table :data="tableData">
<el-table-column prop="id" label="ID"></el-table-column>
<el-table-column prop="name" label="Name"></el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handlePageChange"
:current-page="currentPage"
:page-sizes="[10, 20, 50]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</template>
关键注意事项
- 后端分页需要API支持分页参数
- 前端分页不适合大数据量场景
- 分页组件样式可根据项目需求自定义
- 记得处理无数据的空状态
- 分页参数变化时要重新获取或计算数据






