现实的场景中很常常遇到表格el-table数据过多,为了更好的用户体验,因此咱们须要用到分页,通常分页能够视数据量的大小可分为前端控制和后端控制。前端
先看下效果(已作脱敏处理)sql
图1 前端el-table分页效果后端
这里就把ElementUi官方的例子进行修改来讲明this
<template> <el-table :data="tableData.slice((currentPage-1)*pagesize,currentPage*pagesize)" :stripe="stripe" :current-page.sync="currentPage" style="width: 100%"> <el-table-column prop="date" label="日期" width="180"> </el-table-column> <el-table-column prop="name" label="姓名" width="180"> </el-table-column> <el-table-column prop="address" label="地址"> </el-table-column> </el-table> <div class="pagination"> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 15, 20]" :page-size="pagesize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </template>
<script> export default { data(){ return{ stripe:true,//是否为斑马纹 table tableData: [], currentPage:1, pagesize:10, total:0, } }, methods:{ handleSizeChange(val) { this.pagesize=val; }, handleCurrentChange(val) { this.currentPage = val; }, } } <script>
分页的核心是tableData.slice((currentPage-1)*pagesize,currentPage*pagesize)这一句代码,利用了slice方法把数据源tableData进行分割,但其实是请求了全部的数据,如图2所示,而后实现前端假分页显示。spa
图2 实际tableData请求了全部的数据,共13条数据code
还有一种分页的思想就是给后台传入如上的参数currentPage和pagesize的值,告诉后台,咱们须要[(currentPage-1)*pagesize,currentPage*pagesize]这一个区间的数据,让后台返回来。blog
这两种方法各有利弊,若是是前者前端控制分页的方法,由于本质是请求了全部的数据,若是这个数据量很是大,涉及到了几百,几千甚至几万数据,第一页的table数据加载的时间就会很是慢,由于它把后面的数据都拿过来了,用户体验很是很差,对内存空间也很不友好。明明只显示了几十条的数据,却为此存了几万条的数据,就比如sql语句的select * from和select [须要的字段] from同样,明显后者的效率会好些。可是它也是有好处的,好处就是若是在数据量小的状况下,第一页table加载速度用户也能接受的状况下,用户以后点击切换页面按钮或者直接跳转到哪一个页面都不须要发起请求便可显示出数据,速度很是快。ip
然后者后端控制分页的状况,每次切换页面都得发起请求,毕竟鱼和熊掌不可兼得,咱们只能根据实际状况和用户需求作调整。内存