后端一次性给定全部数据,前端实现分页(vue3+elementplus),翻页不调接口,描述实现逻辑。
时间: 2024-09-26 20:03:53 浏览: 9
在Vue3 + Element Plus中实现前端分页,当后端一次性提供所有数据,而前端需要显示并处理分页功能时,可以按照以下步骤来设计实现逻辑:
1. **接收数据**:
- 后端将所有数据作为响应返回给前端。你可以通过axios等库将这些数据发送到`created()`或`mounted()`生命周期钩子函数中。
```javascript
data() {
return {
allData: [], // 存放所有数据的数组
currentPage: 1, // 当前页数,默认第一页
pageSize: 10, // 每页显示的数据量
totalPages: 0, // 总页数
};
},
async created() {
const res = await axios.get('/api/data', { data: this.allData });
this.allData = res.data;
this.calculateTotalPages();
}
```
2. **计算总页数**:
- 分别除以每页大小来获取总的页数,并保存在`totalPages`变量中。
```javascript
calculateTotalPages() {
this.totalPages = Math.ceil(this.allData.length / this.pageSize);
}
```
3. **分页组件**:
- 使用Element Plus的`el-pagination`组件,设置当前页、每页数量以及总页数。
```html
<template>
<el-pagination
:page-size="pageSize"
:current-page="currentPage"
:total="totalPages"
@current-change="handleCurrentChange"
></el-pagination>
</template>
<script>
methods: {
handleCurrentChange(page) {
this.currentPage = page;
// 更新展示的数据范围
this.displayData();
},
displayData() {
const start = (this.currentPage - 1) * this.pageSize;
const end = start + this.pageSize;
this.$set(this.allData, 'list', this.allData.slice(start, end));
}
}
</script>
```
4. **显示数据**:
- 在`displayData()`方法中,更新显示的数据范围,只渲染当前页的数据。
现在前端实现了分页,每次用户点击页面跳转时,前端会自动从`allData`中提取对应范围的数据展示,而无需每次都请求接口。