el-table 中设置分页显示数据

本文详细介绍了如何在ElementUI中配置分页功能,包括设置table的pageSize和currentPage,动态从数据库获取数据,并确保分页效果的正确实现。同时提到了如何使用定时器实现数据的实时更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在elementUI中,利用Pagination设置table分页显示数据

首先拿到一个table,并添加两个变量,pageSize和currentPage,分别表示页面显示的条数和当前页面,当前页面初始为1,

<template>
  <el-table
    :data="tableData"
    height="250"
    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>
</template>

<script>
  export default {
    data() {
      return {
        tableData3: [{
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }],
        pageSize:10,
        currentPage: 1,
        total: 0
      }
    }
  }
</script>

然后拿到Pagination标签,默认拿到的标签中total对应的数据是一个常量,我们需要把它改成一个变量total,并将这个变量添加进data中,data添加见上一段代码里,初始为0

<el-pagination
  background
  layout="prev, pager, next"
  :total="total">
</el-pagination>

在handleSizeChange方法中修改pageSize的值为val,在handleCurrentChange方法中修改currentPage的值为val,注意这两个val不是同一个val!(前面两个方法在elementUI中表格标签中往下翻可以找到)

handleSizeChange(val) {
            console.log(`每页 ${val}`); // 注意!!!这里的单引号不能改!!!否则无法输出val的值
            this.pageSize = val
        },
        handleCurrentChange(val) {
            console.log(`当前页: ${val}`);
            this.currentPage=val
        }
}

然后连接数据库,把数据库里的每一项条目以及数据总的条数这两个值都要拿到,因为要设置显示的总数

	// 获取所有人的信息
	// 注意!get中的参数要根据你的后端设置来设置,每个人的都是不一样的
   this.$http.get("/tb_user").then(response=>{
     this.tableData = response.data; // 拿到服务器数据到tableData中
     console.log(this.tableData)
   }),
   // 查询总数据条数
   this.$http.get("/tb_user/123").then(response=>{
     this.total = response.data; // 拿到总数total
     console.log(this.total)
   })

接下来最重要的一步来了,你需要把el-table第一行的data中的内容进行修改,否则你无法让他进行分页显示,而是直接把所有数据全部显示在一页了,而且切换也无效,之前定义的两个页面参数要与下边的两个参数设置得一样!!!

:data="tableData.slice((currentPage-1)*pageSize,currentPage*pageSize)"

到这里就大功告成了!我的效果图如下,这是第一页显示的数据
在这里插入图片描述
这是第二页显示的数据
在这里插入图片描述


至于后端怎么实现的,如果你不会的话建议去自学一下Spring系列课程,这个一时半会讲不清楚,并且笔者也是刚学

添加额外功能 实时获取后台数据进行渲染

由于笔者是入门,对于很多东西都不了解,因此选择了最笨的方法,就是通过定时地获取后台进行所谓的实时刷新实现数据的实时更新效果的。
在methods里添加timer方法

timer(){
          return setTimeout(() => {
              this.getSQLData()
          }, 10000);
        }
### 实现 `el-table` 组件滚动分页加载更多数据的方法 为了实现 `el-table` 的滚动分页加载功能,可以通过监听表格容器的滚动事件来动态触发数据加载逻辑。以下是具体实现方法: #### 1. 使用自定义指令绑定滚动事件 通过 Vue 自定义指令 `v-load-table-more` 来监听页面滚动行为,并判断是否到达底部以触发展开新数据的操作。 ```javascript Vue.directive('load-table-more', { bind(el, binding) { let throttleTimer; const handleScroll = () => { clearTimeout(throttleTimer); throttleTimer = setTimeout(() => { const scrollTop = el.scrollTop; const clientHeight = el.clientHeight; const scrollHeight = el.scrollHeight; if (scrollTop + clientHeight >= scrollHeight - 50 && !binding.value.loading) { binding.value(); } }, 200); // 防抖处理 }; el.addEventListener('scroll', handleScroll); // 解绑事件以防内存泄漏 el.__handleScroll__ = handleScroll; }, unbind(el) { el.removeEventListener('scroll', el.__handleScroll__); } }); ``` 此部分代码实现了防抖机制以及滚动到底部时调用回调函数的功能[^1]。 #### 2. 动态更新表格数据 在父组件中设置一个异步方法用于模拟请求接口获取新的数据片段并追加到现有列表中。 ```javascript export default { data() { return { tableData: [], // 表格显示数据集合 pageParams: { // 当前页面参数对象 currentPage: 1, pageSize: 10, totalSize: 0 }, loading: false // 控制加载状态标志位 }; }, methods: { infiniteScrollLoad() { this.loading = true; this.pageParams.currentPage += 1; // 模拟网络延迟效果 setTimeout(async () => { try { const res = await fetch(`https://example.com/api/data?page=${this.pageParams.currentPage}&size=10`); const newData = await res.json(); if (!newData || newData.length === 0) { console.log("No more data"); return; } this.tableData.push(...newData); this.pageParams.totalSize += newData.length; } catch (error) { console.error(error.message); } finally { this.loading = false; } }, 800); } } }; ``` 上述代码展示了如何利用定时器模拟 API 请求过程,并将返回的新记录加入当前展示数组中的操作流程。 #### 3. 设置固定高度与开启虚拟滚动优化(可选) 如果预计总条目数较多,则建议启用 Element Plus 提供的 **虚拟滚动** 特性 (`max-height`) 或者手动控制 DOM 渲染范围减少性能消耗。 ```html <template> <div style="height: calc(100vh - 200px);"> <el-table ref="dataTable" :data="tableData" border height="calc(100%)" v-load-table-more="infiniteScrollLoad"> <!-- 列字段 --> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> </div> </template> ``` 这里设置了表格外层包裹 div 的高度为视窗减去一定偏移量,同时赋予表格本身百分比形式的高度值以便适应不同分辨率下的布局需求。 --- ### 总结注意事项 - 如果项目中有多个类似的场景需要用到该功能,推荐封装成独立插件或者通用工具类库。 - 对于大数据集而言,除了采用无限滚定外还可以考虑其他策略比如懒加载、分批渲染等方式提升用户体验和系统效率[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值