vue page 实现分页
实现分页的基本思路
在Vue中实现分页功能通常需要结合后端API返回的分页数据(如当前页码、每页条数、总数据量等)和前端的分页控件。以下是基于Element UI的分页组件实现方案,其他UI库或自定义分页逻辑类似。

安装Element UI(若未安装)
npm install element-ui
在main.js中全局引入:

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
分页组件代码示例
<template>
<div>
<!-- 数据表格 -->
<el-table :data="tableData" border>
<el-table-column prop="id" label="ID"></el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
</el-table>
<!-- 分页控件 -->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 50]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [], // 当前页数据
currentPage: 1, // 当前页码
pageSize: 10, // 每页条数
total: 0 // 总数据量
};
},
mounted() {
this.fetchData();
},
methods: {
fetchData() {
// 模拟API请求,实际替换为axios调用
const mockData = Array.from({ length: 100 }, (_, i) => ({
id: i + 1,
name: `项目${i + 1}`
}));
// 分页逻辑
const start = (this.currentPage - 1) * this.pageSize;
const end = start + this.pageSize;
this.tableData = mockData.slice(start, end);
this.total = mockData.length;
},
handleSizeChange(val) {
this.pageSize = val;
this.fetchData();
},
handleCurrentChange(val) {
this.currentPage = val;
this.fetchData();
}
}
};
</script>
与后端API联调
实际项目中通常需要从后端获取分页数据。以下是使用Axios的示例:
methods: {
async fetchData() {
try {
const res = await axios.get('/api/data', {
params: {
page: this.currentPage,
size: this.pageSize
}
});
this.tableData = res.data.list;
this.total = res.data.total;
} catch (error) {
console.error(error);
}
}
}
自定义分页组件
如果需要完全自定义分页逻辑,可以手动实现:
<template>
<div class="pagination">
<button
v-for="page in pageCount"
:key="page"
@click="goToPage(page)"
:class="{ active: currentPage === page }">
{{ page }}
</button>
</div>
</template>
<script>
export default {
props: ['total', 'perPage'],
data() {
return { currentPage: 1 };
},
computed: {
pageCount() {
return Math.ceil(this.total / this.perPage);
}
},
methods: {
goToPage(page) {
this.currentPage = page;
this.$emit('page-changed', page);
}
}
};
</script>
<style>
.pagination button { margin: 0 5px; }
.pagination button.active { font-weight: bold; }
</style>
关键注意事项
- 分页参数需与后端约定一致(通常为
page/size或pageNum/pageSize) - 处理无数据时的空状态显示
- 大型数据集建议使用服务器端分页而非前端分页
- 考虑添加加载状态提示(如
loading动画)






