vue 分页如何实现
实现 Vue 分页的几种方法
使用 Element UI 分页组件
Element UI 提供了现成的分页组件 el-pagination,适合快速集成。安装 Element UI 后,直接引入组件并绑定数据即可。

<template>
<el-pagination
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-size="pageSize"
:total="total">
</el-pagination>
</template>
<script>
export default {
data() {
return {
currentPage: 1,
pageSize: 10,
total: 100
};
},
methods: {
handleCurrentChange(val) {
this.currentPage = val;
this.fetchData();
},
fetchData() {
// 根据 currentPage 和 pageSize 请求数据
}
}
};
</script>
自定义分页逻辑
如果需要更灵活的控制,可以手动实现分页逻辑。通过计算属性对数据进行切片,并渲染分页按钮。

<template>
<div>
<ul>
<li v-for="item in paginatedData" :key="item.id">{{ item.name }}</li>
</ul>
<button
v-for="page in totalPages"
:key="page"
@click="currentPage = page">
{{ page }}
</button>
</div>
</template>
<script>
export default {
data() {
return {
data: [], // 原始数据
currentPage: 1,
pageSize: 5
};
},
computed: {
paginatedData() {
const start = (this.currentPage - 1) * this.pageSize;
const end = start + this.pageSize;
return this.data.slice(start, end);
},
totalPages() {
return Math.ceil(this.data.length / this.pageSize);
}
}
};
</script>
结合后端分页
实际项目中,数据通常由后端分页返回。前端只需传递页码和每页条数,后端返回对应数据及总数。
<template>
<el-pagination
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-size="pageSize"
:total="total">
</el-pagination>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
currentPage: 1,
pageSize: 10,
total: 0,
list: []
};
},
created() {
this.fetchData();
},
methods: {
fetchData() {
axios.get('/api/data', {
params: {
page: this.currentPage,
size: this.pageSize
}
}).then(res => {
this.list = res.data.list;
this.total = res.data.total;
});
},
handleCurrentChange(val) {
this.currentPage = val;
this.fetchData();
}
}
};
</script>
使用第三方库
若项目未使用 UI 框架,可以选择轻量级分页库如 vue-paginate。安装后通过简单配置即可实现分页。
npm install vue-paginate
<template>
<div>
<paginate
:page-count="totalPages"
:click-handler="changePage"
:prev-text="'Prev'"
:next-text="'Next'">
</paginate>
</div>
</template>
<script>
import Paginate from 'vue-paginate';
export default {
components: { Paginate },
data() {
return {
currentPage: 1,
totalPages: 10
};
},
methods: {
changePage(page) {
this.currentPage = page;
}
}
};
</script>






