Vue和elementui实现分页
Vue 与 ElementUI 实现分页的方法
在 Vue 项目中结合 ElementUI 实现分页功能,可以通过以下步骤完成。ElementUI 提供了 el-pagination 组件,支持多种分页场景。
安装 ElementUI
确保项目中已安装 ElementUI。若未安装,可以通过以下命令安装:

npm install element-ui
在 main.js 中引入 ElementUI:
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
基本分页实现
在 Vue 组件中使用 el-pagination 实现基础分页功能:

<template>
<div>
<!-- 表格数据展示 -->
<el-table :data="currentPageData" border>
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="age" label="年龄"></el-table-column>
</el-table>
<!-- 分页组件 -->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 40]"
: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 // 总数据量
};
},
computed: {
// 计算当前页显示的数据
currentPageData() {
const start = (this.currentPage - 1) * this.pageSize;
const end = start + this.pageSize;
return this.tableData.slice(start, end);
}
},
methods: {
// 每页条数变化时触发
handleSizeChange(val) {
this.pageSize = val;
},
// 当前页码变化时触发
handleCurrentChange(val) {
this.currentPage = val;
},
// 模拟获取数据
fetchData() {
// 假设从接口获取数据
this.tableData = [
{ name: '张三', age: 20 },
{ name: '李四', age: 25 },
// 更多数据...
];
this.total = this.tableData.length;
}
},
mounted() {
this.fetchData();
}
};
</script>
结合后端分页
实际项目中,分页通常需要后端接口支持。以下是结合后端 API 的实现方式:
<template>
<div>
<el-table :data="tableData" border>
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="age" label="年龄"></el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 40]"
: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
};
},
methods: {
handleSizeChange(val) {
this.pageSize = val;
this.fetchData();
},
handleCurrentChange(val) {
this.currentPage = val;
this.fetchData();
},
fetchData() {
// 模拟 API 请求参数
const params = {
page: this.currentPage,
size: this.pageSize
};
// 实际项目中替换为 axios 请求
// axios.get('/api/data', { params }).then(response => {
// this.tableData = response.data.list;
// this.total = response.data.total;
// });
// 模拟数据
setTimeout(() => {
this.tableData = [
{ name: '张三', age: 20 },
{ name: '李四', age: 25 },
// 更多数据...
];
this.total = 100; // 假设总数据量为 100
}, 300);
}
},
mounted() {
this.fetchData();
}
};
</script>
自定义分页样式
通过 layout 属性可以自定义分页组件的布局。例如:
<el-pagination
layout="prev, pager, next, jumper, ->, total"
:total="1000">
</el-pagination>
分页事件说明
size-change:每页条数变化时触发,参数为新条数。current-change:当前页码变化时触发,参数为新页码。prev-click:点击上一页按钮时触发(仅在prev按钮被点击时生效)。next-click:点击下一页按钮时触发(仅在next按钮被点击时生效)。
通过以上方法,可以灵活实现 Vue 与 ElementUI 的分页功能,满足前端分页或后端分页的需求。






