vue实现table加分页
实现基础表格与分页
在Vue中实现表格分页功能,需要结合表格组件和分页组件。以下是使用Element UI的实现方式:
安装Element UI(如未安装):
npm install element-ui
引入Element UI并注册组件:
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)
表格组件实现
创建包含分页的表格组件模板:

<template>
<div>
<el-table :data="currentTableData" border style="width: 100%">
<el-table-column prop="date" label="日期"></el-table-column>
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[5, 10, 20]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</template>
分页逻辑实现
在脚本部分实现分页逻辑:
<script>
export default {
data() {
return {
tableData: [], // 所有数据
currentTableData: [], // 当前页显示数据
currentPage: 1,
pageSize: 5,
total: 0
}
},
created() {
this.fetchData()
},
methods: {
fetchData() {
// 模拟API请求
this.tableData = [
{ date: '2023-01-01', name: '张三', address: '北京' },
{ date: '2023-01-02', name: '李四', address: '上海' },
// 更多数据...
]
this.total = this.tableData.length
this.updateCurrentTableData()
},
updateCurrentTableData() {
const start = (this.currentPage - 1) * this.pageSize
const end = start + this.pageSize
this.currentTableData = this.tableData.slice(start, end)
},
handleSizeChange(val) {
this.pageSize = val
this.updateCurrentTableData()
},
handleCurrentChange(val) {
this.currentPage = val
this.updateCurrentTableData()
}
}
}
</script>
自定义样式调整
如需自定义分页样式,可以添加CSS:

<style scoped>
.el-pagination {
margin-top: 20px;
text-align: right;
}
</style>
服务器端分页实现
对于大数据量情况,建议实现服务器端分页:
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)
}
},
handleSizeChange(val) {
this.pageSize = val
this.fetchData()
},
handleCurrentChange(val) {
this.currentPage = val
this.fetchData()
}
}
性能优化建议
对于前端分页,当数据量较大时考虑虚拟滚动技术。可以使用第三方库如vue-virtual-scroller:
npm install vue-virtual-scroller
实现虚拟滚动表格:
<template>
<RecycleScroller
class="scroller"
:items="tableData"
:item-size="50"
key-field="id">
<template v-slot="{ item }">
<div class="table-row">
<div>{{ item.date }}</div>
<div>{{ item.name }}</div>
<div>{{ item.address }}</div>
</div>
</template>
</RecycleScroller>
</template>






