vue实现分页多元
Vue 实现分页的多种方法
使用 Element UI 的分页组件
Element UI 提供了现成的分页组件 el-pagination,可以快速实现分页功能。以下是一个简单的示例代码:
<template>
<div>
<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 {
currentPage: 1,
pageSize: 10,
total: 100
};
},
methods: {
handleSizeChange(val) {
this.pageSize = val;
},
handleCurrentChange(val) {
this.currentPage = val;
}
}
};
</script>
自定义分页组件
如果需要更灵活的分页功能,可以自定义分页组件。以下是一个简单的自定义分页实现:
<template>
<div class="pagination">
<button @click="prevPage" :disabled="currentPage === 1">上一页</button>
<span>{{ currentPage }} / {{ totalPages }}</span>
<button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
</div>
</template>
<script>
export default {
props: {
totalItems: {
type: Number,
required: true
},
itemsPerPage: {
type: Number,
default: 10
}
},
data() {
return {
currentPage: 1
};
},
computed: {
totalPages() {
return Math.ceil(this.totalItems / this.itemsPerPage);
}
},
methods: {
prevPage() {
if (this.currentPage > 1) {
this.currentPage--;
this.$emit('page-changed', this.currentPage);
}
},
nextPage() {
if (this.currentPage < this.totalPages) {
this.currentPage++;
this.$emit('page-changed', this.currentPage);
}
}
}
};
</script>
使用 Vuex 管理分页状态
在大型应用中,可以使用 Vuex 来管理分页状态,确保状态的一致性。以下是一个示例:
<template>
<div>
<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>
import { mapState, mapMutations } from 'vuex';
export default {
computed: {
...mapState('pagination', ['currentPage', 'pageSize', 'total'])
},
methods: {
...mapMutations('pagination', ['setCurrentPage', 'setPageSize']),
handleSizeChange(val) {
this.setPageSize(val);
},
handleCurrentChange(val) {
this.setCurrentPage(val);
}
}
};
</script>
分页与后端 API 结合
在实际应用中,分页通常需要与后端 API 结合。以下是一个示例代码:
<template>
<div>
<el-pagination
@size-change="fetchData"
@current-change="fetchData"
: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 {
currentPage: 1,
pageSize: 10,
total: 0,
items: []
};
},
created() {
this.fetchData();
},
methods: {
fetchData() {
const params = {
page: this.currentPage,
size: this.pageSize
};
axios.get('/api/items', { params })
.then(response => {
this.items = response.data.items;
this.total = response.data.total;
})
.catch(error => {
console.error(error);
});
}
}
};
</script>
使用第三方库
除了 Element UI,还可以使用其他第三方库如 Vuetify 或 Bootstrap-Vue 来实现分页功能。以下是使用 Vuetify 的示例:
<template>
<v-pagination
v-model="currentPage"
:length="totalPages"
:total-visible="7"
@input="fetchData"
></v-pagination>
</template>
<script>
export default {
data() {
return {
currentPage: 1,
totalPages: 10
};
},
methods: {
fetchData() {
// Fetch data based on currentPage
}
}
};
</script>
以上方法涵盖了 Vue 中实现分页的多种方式,可以根据项目需求选择合适的方法。







