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

本文介绍了如何在Vue应用中使用Element-UI的el-table和el-pagination组件实现前端分页功能,提供了一个代码示例,适用于后端不进行分页处理时前端自行处理数据的情况。
摘要由CSDN通过智能技术生成

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>
  • 41
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现分页的思路大致如下: 1. 在Vue的data中定义一个数组,用于存放分页数据。 2. 在mounted函数中发起请求获取数据,并将数据存放到定义的数组中。 3. 在页面上使用Element-uiTable组件展示数据,并且使用Pagination组件实现分页功能。 4. 当用户点击分页按钮时,触发pagination的current-change事件,重新请求数据并更新数组中的数据。 以下是一个简单的例子: ``` <template> <div> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="sex" label="性别"></el-table-column> </el-table> <el-pagination @current-change="handlePageChange" :current-page="currentPage" :page-size="pageSize" :total="total"> </el-pagination> </div> </template> <script> import axios from 'axios'; export default { data() { return { tableData: [], currentPage: 1, pageSize: 10, total: 0 }; }, mounted() { this.fetchData(); }, methods: { fetchData() { axios.get('/api/data', { params: { page: this.currentPage, pageSize: this.pageSize } }).then(response => { this.tableData = response.data.list; this.total = response.data.total; }); }, handlePageChange(currentPage) { this.currentPage = currentPage; this.fetchData(); } } }; </script> ``` 在上面的例子中,我们使用了Element-uiTablePagination组件,并且使用axios来发起请求。在mounted函数中,我们调用fetchData函数来获取数据,并将数据存放到tableData数组中。在页面上,我们将tableData数组作为Table组件的data属性传递,展示数据。同时,我们使用Pagination组件实现分页功能。当用户点击分页按钮时,我们调用handlePageChange函数来更新currentPage变量,并重新调用fetchData函数来获取新的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yongqiang Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值