vue实现后台分页
Vue 实现后台分页的方法
在 Vue 中实现后台分页通常需要结合后端 API 和前端分页组件。以下是几种常见的实现方式:
使用 Element UI 的分页组件
安装 Element UI 后,可以使用 el-pagination 组件实现分页:
<template>
<div>
<el-table :data="tableData">
<!-- 表格列定义 -->
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 50, 100]"
: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: {
fetchData() {
const params = {
page: this.currentPage,
size: this.pageSize
}
// 调用 API 获取数据
getData(params).then(res => {
this.tableData = res.data.list
this.total = res.data.total
})
},
handleSizeChange(val) {
this.pageSize = val
this.fetchData()
},
handleCurrentChange(val) {
this.currentPage = val
this.fetchData()
}
},
created() {
this.fetchData()
}
}
</script>
使用 Vue 原生实现
如果不使用 UI 库,可以手动实现分页功能:
<template>
<div>
<table>
<!-- 表格内容 -->
</table>
<div class="pagination">
<button @click="prevPage" :disabled="currentPage === 1">上一页</button>
<span>第 {{ currentPage }} 页</span>
<button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
</div>
</div>
</template>
<script>
export default {
data() {
return {
currentPage: 1,
pageSize: 10,
totalItems: 0,
items: []
}
},
computed: {
totalPages() {
return Math.ceil(this.totalItems / this.pageSize)
}
},
methods: {
fetchData() {
const params = {
page: this.currentPage,
size: this.pageSize
}
// API 调用
getData(params).then(res => {
this.items = res.data.list
this.totalItems = res.data.total
})
},
prevPage() {
if (this.currentPage > 1) {
this.currentPage--
this.fetchData()
}
},
nextPage() {
if (this.currentPage < this.totalPages) {
this.currentPage++
this.fetchData()
}
}
}
}
</script>
使用 Vuex 管理分页状态
对于大型应用,可以使用 Vuex 集中管理分页状态:

// store.js
export default new Vuex.Store({
state: {
currentPage: 1,
pageSize: 10,
totalItems: 0,
items: []
},
mutations: {
SET_ITEMS(state, payload) {
state.items = payload.list
state.totalItems = payload.total
},
SET_PAGE(state, page) {
state.currentPage = page
}
},
actions: {
async fetchItems({ commit, state }) {
const params = {
page: state.currentPage,
size: state.pageSize
}
const res = await getData(params)
commit('SET_ITEMS', res.data)
}
}
})
分页优化技巧
- 添加加载状态指示器,提升用户体验
- 实现防抖处理,避免频繁请求
- 缓存已加载的数据,减少重复请求
- 实现URL同步,保持页面状态与URL参数一致
// 防抖示例
import _ from 'lodash'
methods: {
fetchData: _.debounce(function() {
// API调用逻辑
}, 300)
}
以上方法可以根据具体项目需求选择适合的实现方式,Element UI 的分页组件提供了丰富的功能,适合大多数后台管理系统。原生实现方式更加灵活,适合定制化需求较高的场景。Vuex 管理状态适合大型应用,保持状态的一致性。





