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>
GitHub 加速计划 / vu / vue
82
16
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:4 个月前 )
9e887079 [skip ci] 2 个月前
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐