Vue+Element-UI 实现前端分页功能,利用el-table和el-pagination组件实现表格前端分页

Vue+Element-UI 实现前端分页功能,利用el-table和el-pagination组件实现表格前端分页:

当table的数据量比较大的时候,一个屏幕展示不出全部的数据,这个时候就需要分页显示。而多数情况下都是做的后端分页,就是将分页参数和查询条件一并传到后端,后端将当前页要显示的数据返回来。但是有时候会遇到后端也是去调用了其它系统的接口,这时候返回到前端的是所有的数据,此时需要前端自行去进行分页显示。今天抽空写了个demo,效果如下:

有朋友要用el-table组件做前端分页的时候可以参考以下代码:

<template>

<div class="paging">

<div class="box_body">

<el-table :data="tableData" border size="small" style="width: 100%">

<el-table-column

label="序号"

prop="num"

min-width="150"

></el-table-column>

<el-table-column

label="姓名"

prop="name"

min-width="150"

></el-table-column>

<el-table-column

label="性别"

prop="sex"

min-width="150"

></el-table-column>

<el-table-column

label="年龄"

prop="age"

min-width="150"

></el-table-column>

</el-table>

<!--===分页=====-->

<el-pagination

:current-page="pageinfo.page"

:page-sizes="[10, 20, 30, 40]"

:page-size="pageinfo.size"

layout="total, sizes, prev, pager, next, jumper"

:total="pageinfo.total"

@size-change="handleSizeChange"

@current-change="handleCurrentChange"

style="margin-bottom: 3px"

></el-pagination>

</div>

</div>

</template>

<script>

export default {

name: "paging",

data() {

return {

// 从后端获取到的所有表格数据

sourceTableData: [],

// 页面要显示的表格数据

tableData: [],

// 分页信息

pageinfo: {

page: 1,

size: 10,

total: 0,

},

};

},

created() {

// 页面初始化时生成100条数据,模拟从后端获取所有数据

let arr = [];

for (let i = 0; i < 100; i++) {

let obj = {};

obj.num = i + 1;

obj.name = "name" + (i + 1);

obj.sex = Math.round(Math.random()) == 0 ? "男" : "女";

obj.age = 20 + Math.round(Math.random() * 30);

arr.push(obj);

}

this.sourceTableData = arr;

// 初始化算出第一页数据

this.tableData = this.currentChangePage(

this.pageinfo.size,

this.pageinfo.page

);

this.pageinfo.total = this.sourceTableData.length;

},

methods: {

/** 切换每页显示条数 */

handleSizeChange(val) {

this.pageinfo.page = 1;

this.pageinfo.size = val;

this.tableData = this.currentChangePage(val, this.pageinfo.page);

},

/** 切换分页 */

handleCurrentChange(val) {

this.pageinfo.page = val;

this.tableData = this.currentChangePage(this.pageinfo.size, val);

},

// 分页方法(用于表格数据后端不分页,放到前端做分页)

currentChangePage(size, current) {

const tablePush = [];

let array = JSON.parse(JSON.stringify(this.sourceTableData));

array.forEach((item, index) => {

if (size * (current - 1) <= index && index <= size * current - 1) {

tablePush.push(item);

}

});

return tablePush;

},

},

};

</script>

<style>

.paging {

width: 100%;

height: 100%;

}

.box_body {

width: 1200px;

margin: 50px auto;

}

</style>

相关推荐
龙在天37 分钟前
npm run dev 做了什么❓小白也能看懂
前端
hellokai1 小时前
React Native新架构源码分析
android·前端·react native
li理2 小时前
鸿蒙应用开发完全指南:深度解析UIAbility、页面与导航的生命周期
前端·harmonyos
去伪存真2 小时前
因为rolldown-vite比vite打包速度快, 所以必须把rolldown-vite在项目中用起来🤺
前端
KubeSphere2 小时前
Kubernetes v1.34 重磅发布:调度更快,安全更强,AI 资源管理全面进化
前端
wifi歪f2 小时前
🎉 Stenciljs,一个Web Components框架新体验
前端·javascript
1024小神2 小时前
如何快速copy复制一个网站,或是将网站本地静态化访问
前端
掘金一周2 小时前
DeepSeek删豆包冲上热搜,大模型世子之争演都不演了 | 掘金一周 8.28
前端·人工智能·后端
moyu842 小时前
前端存储三剑客:Cookie、LocalStorage 与 SessionStorage 全方位解析
前端
不爱说话郭德纲2 小时前
👩‍💼产品姐一句小优化,让我给上百个列表加上一个动态实时计算高度的方法😿😿
前端·vue.js·性能优化