vue分页功能的实现
Vue 分页功能的实现
分页组件的基本结构
创建一个独立的 Pagination.vue 组件,包含页码按钮、上一页/下一页按钮以及跳转功能。组件接收 total(总数据量)、currentPage(当前页)和 pageSize(每页条数)作为 props。

<template>
<div class="pagination">
<button @click="handlePrev" :disabled="currentPage === 1">上一页</button>
<span v-for="page in pages" :key="page">
<button
@click="handlePageChange(page)"
:class="{ active: page === currentPage }"
>
{{ page }}
</button>
</span>
<button @click="handleNext" :disabled="currentPage === totalPages">下一页</button>
</div>
</template>
计算属性和方法
通过计算属性生成页码范围,并定义页码切换逻辑:

<script>
export default {
props: {
total: { type: Number, required: true },
currentPage: { type: Number, required: true },
pageSize: { type: Number, default: 10 }
},
computed: {
totalPages() {
return Math.ceil(this.total / this.pageSize);
},
pages() {
const range = [];
const start = Math.max(1, this.currentPage - 2);
const end = Math.min(this.totalPages, this.currentPage + 2);
for (let i = start; i <= end; i++) {
range.push(i);
}
return range;
}
},
methods: {
handlePageChange(page) {
this.$emit('page-change', page);
},
handlePrev() {
if (this.currentPage > 1) {
this.$emit('page-change', this.currentPage - 1);
}
},
handleNext() {
if (this.currentPage < this.totalPages) {
this.$emit('page-change', this.currentPage + 1);
}
}
}
};
</script>
父组件集成
在父组件中引入分页组件,并实现数据分页逻辑:
<template>
<div>
<ul>
<li v-for="item in paginatedData" :key="item.id">{{ item.name }}</li>
</ul>
<Pagination
:total="data.length"
:current-page="currentPage"
@page-change="handlePageChange"
/>
</div>
</template>
<script>
import Pagination from './Pagination.vue';
export default {
components: { Pagination },
data() {
return {
data: [], // 从API获取的原始数据
currentPage: 1,
pageSize: 5
};
},
computed: {
paginatedData() {
const start = (this.currentPage - 1) * this.pageSize;
const end = start + this.pageSize;
return this.data.slice(start, end);
}
},
methods: {
handlePageChange(page) {
this.currentPage = page;
}
}
};
</script>
样式优化
为分页按钮添加基础样式,突出显示当前页:
.pagination button {
margin: 0 5px;
padding: 5px 10px;
cursor: pointer;
}
.pagination button.active {
background-color: #42b983;
color: white;
}
.pagination button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
高级功能扩展
- 动态页码数量:通过
maxVisiblePagesprop 控制显示的页码数量。 - 快速跳转:添加输入框实现跳转到指定页码。
- 每页条数切换:增加下拉菜单调整
pageSize。 - API 集成:在
handlePageChange中直接调用 API 获取分页数据,适用于大数据量场景。






