前端表格分页预处理

在前端表格分页预处理

需求背景

​ 需要前端对表格数据进行预分页处理后进行新增,组件选用 elementUI 中的表格和分页,使用vue

​ 常规的数据分页多由后端处理,通过不同的 pageSize 和 pageNum 进行控制分页,

​ 前端对此数据处理其实也大同小异 实现原理如下

需要的数据

​ 通常对一数组内的数据进行分页处理,我们需要根据原数组获得以下信息

  1. 总条数 total ,既数组长度;
  2. 每页条数和页数 pageSize 和 pageNum 这些参数可以直接通过分页组件传回,不同的使用场景也可以自行配置
  3. 页数 pages ,通过总条数和 pageSize 相除 取整向上取整即可;

处理思路

​ 通过对原数组部分截取放到新数组来进行分页展示,我们可分为原数组和展示数组,

​ 展示数组有两种情况,即 pageSize 和 total 正好整除和有余数两种,整除那么每页的数据刚好填满,出现余数需对最后页面进行处理;其本质是简单的数学问题;

代码思路如下,进行了简单的修改

Page () {
    /******************信息预处理***********************/
    //arr源数组
      this.tableData = [];//展示数组
      this.tablePage.total = this.arr.length;//条数
      this.tablePage.pages = Math.ceil(arr.length / 		      this.tablePage.pageSize);//页数
      //数据处理
      const pageNum = this.tablePage.pageNum;//页数
      const pageSize = this.tablePage.pageSize;//每页几条
    
    /*******************数据处理**********************/
    
      if (this.arr.length !== 0) {
        this.$nextTick(() => {
            //预先判断当前是否为末页,如果为整页则每页展示数据量为 pageSize
          if (this.tablePage.pages !== pageNum) {
              //减一是对页数的处理,为单页时起始数为0位
            for (let i = pageSize * (pageNum - 1); i < (pageNum * pageSize); i++) {
              this.tableData.push(this.ruleForm.infoItemVos[i]);
            }
          } else {
               //末页展示数据量为最后的余数,所以循环条件即数组的最后一位
            for (let i = pageSize * (pageNum - 1); i < this.tablePage.total; i++) {
              this.tableData.push(this.ruleForm.infoItemVos[i]);
            }
          }
        })
      }
    },

以上处理片段条件为简单的一种,实现方法很多,但原理基本相同,都是对元数据部分截取处理,对数组进行数学操作,

比较需要注意的是在对表格内容进行编辑操作的时候,需要对数据深拷贝,相关的信息后面更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Vue 和 Element UI 中,实现前端表格分页可以遵循以下步骤: 1. 将表格数据存储在一个数组中,例如 tableData。 2. 定义每页显示的数据量,例如 pageSize。 3. 定义当前页码,例如 currentPage。 4. 根据 pageSize 和 currentPage 来计算当前页应该显示的数据,例如: ``` const start = (currentPage - 1) * pageSize; const end = start + pageSize; const pageData = tableData.slice(start, end); ``` 5. 将 pageData 显示在表格中。 6. 在表格下方添加分页组件,使用 Element UI 的 el-pagination 组件即可。将 total 属性设为 tableData.length,pageSize 属性设为 pageSize,v-model 绑定 currentPage。 完整代码示例: ``` <template> <div> <el-table :data="pageData"> <!-- 表格列 --> </el-table> <el-pagination :current-page="currentPage" :page-size="pageSize" :total="tableData.length" @current-change="handleCurrentChange" /> </div> </template> <script> export default { data() { return { tableData: [], // 表格数据 pageSize: 10, // 每页显示的数据量 currentPage: 1, // 当前页码 }; }, computed: { pageData() { const start = (this.currentPage - 1) * this.pageSize; const end = start + this.pageSize; return this.tableData.slice(start, end); }, }, methods: { handleCurrentChange(currentPage) { this.currentPage = currentPage; }, }, }; </script> ``` 这样就可以实现基本的前端表格分页了。如果需要支持排序、筛选等功能,可以在计算 pageData 的时候加入对应的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值