elementui表格分页功能的实现

本文详细介绍使用ElementUI实现表格分页功能的具体代码实例。通过调整每页显示条数和当前页码,实现数据的分页展示。代码中包含完整的模板、数据定义及方法处理,适用于快速搭建具有分页功能的表格界面。

elementui表格分页功能的实现

废话不多说,直接上代码

<template>
  <div>
    <el-table :data="tableData.slice((currpage - 1) * pagesize, currpage * pagesize)"
      border
      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="block">
      <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :page-sizes="[5, 10, 15, 20]" //数组元素为展示的选择每页显示个数的选项
        :page-size="pagesize"//当前页展示的条数
        layout="total, sizes, prev, pager, next, jumper"
        :total="tableData.length">
      </el-pagination>
    </div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        pagesize: 5,//每页显示几条
        currpage:1,//当前页码
        tableData: [{  //此处为后台传过来的table数据
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        },{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        },{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        },{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        },{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        }]
      }
    },
    methods: {
      handleSizeChange(val) {
        this.pagesize = val;
      },
      handleCurrentChange(val) {
        this.currpage = val;
      }
    },
  }
</script>

最终实现效果

在这里插入图片描述

### ElementUI 表格组件分页功能实现方法 在 ElementUI 中,可以通过 `el-pagination` 组件与 `el-table` 组件配合来实现表格分页功能。以下是具体实现方式: #### 1. 使用 `el-pagination` 配合 `el-table` 通过绑定 `@size-change` 和 `@current-change` 方法到 `el-pagination` 上,可以动态获取当前页面大小以及当前页码,并基于这些参数重新请求数据。 ```vue <template> <div> <!-- 表格 --> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="date" label="日期"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> <!-- 分页 --> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </div> </template> <script> export default { data() { return { currentPage: 1, pageSize: 10, total: 0, tableData: [] }; }, methods: { handleSizeChange(val) { this.pageSize = val; this.fetchData(); // 调整每页显示数量时刷新数据 }, handleCurrentChange(val) { this.currentPage = val; this.fetchData(); // 切换页码时刷新数据 }, fetchData() { const start = (this.currentPage - 1) * this.pageSize; // 当前起始位置 const end = start + this.pageSize; // 结束位置 // 假设模拟接口返回总数据为 allTableData const allTableData = [ { date: '2023-09-01', name: '张三', address: '北京' }, { date: '2023-09-02', name: '李四', address: '上海' }, { date: '2023-09-03', name: '王五', address: '广州' } // 更多数据... ]; this.total = allTableData.length; // 设置总数 this.tableData = allTableData.slice(start, end); // 截取对应数据 } }, created() { this.fetchData(); } }; </script> ``` 上述代码展示了如何利用 `el-pagination` 的两个事件监听器 `@size-change` 和 `@current-change` 来控制分页逻辑[^1]。 #### 2. 序号累加功能 为了使表格中的序号能够随着分页变化而正确显示,可以在 `<el-table-column>` 中定义一个自定义列渲染函数,计算每一行的实际索引。 ```vue <el-table-column type="index" :index="indexMethod" label="序号"></el-table-column> ``` 其中,`indexMethod` 是一个用于计算实际索引的方法: ```javascript methods: { indexMethod(index) { return (this.currentPage - 1) * this.pageSize + index + 1; } } ``` 此方法会根据当前页码和每页显示的数量调整序号。 #### 3. 滚动分页加载 对于大数据量场景,还可以采用滚动分页的方式加载更多数据。设置 `height` 属性让表格支持滚动,并监听 `scroll` 事件,在接近底部时自动加载下一页数据。 ```vue <el-table ref="tableRef" :data="tableData" height="400" @scroll="onScroll"> <el-table-column prop="date" label="日期"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> ``` 在 Vue 实例中处理滚动事件: ```javascript data() { return { page: 1, pageSize: 10, hasMoreData: true, tableData: [] }; }, methods: { onScroll({ target }) { const { scrollTop, scrollHeight, clientHeight } = target; if (scrollTop + clientHeight >= scrollHeight && this.hasMoreData) { this.loadMoreData(); } }, loadMoreData() { this.page++; if (this.page > Math.ceil(this.total / this.pageSize)) { this.hasMoreData = false; return; } const newItems = this.allTableData.slice( (this.page - 1) * this.pageSize, this.page * this.pageSize ); this.tableData.push(...newItems); } } ``` 该部分实现了当用户滚动至表格底部时自动加载更多数据的功能[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值