在vue中表格滚动加载数据的几种方式

Vue3+ElementPlus实战:el-table无限滚动加载的两种高效实现方案 本文详细解析了在Vue3和ElementPlus项目中,为el-table实现无限滚动加载(触底加载)的两种高效方案:DOM监听与Ref绑定。通过对比其原理、代码实现、优缺点及适用场景,并深入探讨了加载状态反馈、错误处理、性能优化等进阶实践,帮助开发者根据项目需求选择最佳方案,提升大数据量表格的渲染性能和用户体验。 阅读详情

在vue中表格滚动加载数据的几种方式

表格滚动加载数据本次将分两种类型进行讲解,分别是表格内加载(即监听el-table中的滚动事件,好处是表格的表头可以固定住)、表格的父级元素绑定滚动时间加载数据。

一、监听表格内的滚动事件(可固定住表头)

1、vue-infinite-loading

使用文档说明链接:vue-infinite-loading

好处是:可以固定住表头,监听表格的滚动,且每次滚动到底部加载完数据,滚动条依旧停留在上一次的浏览记录中

坏处是:在首次如果数据没有能够撑开表格的高度,会一直触发滚动事件,等到数据撑开表格后,继续监听表格的滚动事件

简单的使用步骤如下所示:

      a、安装vue-infinite-loading,

npm install vue-infinite-loading -S

      b、设置表格的高度,利用el-table中的slot属性,在表格的最后将vue-infinite-loading插件放入,如下所示:

      <el-table :data="list" border fit highlight-current-row width="100%" class="pushtable" height="300px" id="pushtable" style="margin-top: 20px;">
      <el-table-column align="center" label="司机ID">
        <template slot-scope="scope">
          <span>{{ scope.row.id}}</span>
        </template>
      </el-table-column>
      <el-table-column align="center" label="累计推送轮数">
        <template slot-scope="scope">
          <span>{{ scope.row.totalPushRound}}</span>
        </template>
      </el-table-column>
      <infinite-loading
      slot="append"
      @infinite="infiniteHandlera"
      force-use-infinite-wrapper=".el-table__body-wrapper">
        <div slot="spinner" style="margin-top: 10px;margin-bottom: 10px;">加载中...</div>
        <div slot="no-more" style="margin-top: 10px;margin-bottom: 10px;">没有更多了</div>
     </infinite-loading>
    </el-table>


// 滚动事件的实现
    infiniteHandlera ($state) {
      if (this.list.length < 20) {
        this.list.push({id: 3, totalPushRound: '测试'})
        setTimeout(() => {
          $state.loaded()
          console.log('12')
        }, 2000)
      } else {
        $state.complete()
      }
    }

还有一个很nice的点,就是官方还提供了加载中、加载完毕等等插槽供君选择(需注意一个点,如一个页面有多个表格,需要更加具体的css选择器去找到,force-use-infinite-wrapper=".el-table__body-wrapper"这个说明是在监听类为.el-table__body-wrapper的表格)

 

2、在vue中直接注册滚动事件,利用vue的directives,这样解决上面的在数据没有撑开表格之前,持续执行事件,这个注册事件仅仅针对于表格的滚动到底部的事件

  directives: {
    load: {
      bind (el, binding) {
        let p = 0
        let t = 0
        let down = true
        let selectWrap = el.querySelector('.el-table__body-wrapper')
        selectWrap.addEventListener('scroll', function () {
          // 判断是否向下滚动
          p = this.scrollTop
          if (t < p) {
            down = true
          } else {
            down = false
          }
          t = p
          // 判断是否到底
          const sign = 10
          const scrollDistance = this.scrollHeight - this.scrollTop - this.clientHeight
          if (scrollDistance <= sign && down) {
            binding.value()
          }
        })
      }
    }
  }

 

二、监听表格外层元素的滚动事件

1、其实上面两种也可以适用于除了表格之外的元素的滚动事件,因为这篇文章主要针对于表格的滚动事件,对于在此做了分类而已~

2、利用el-element中提供的https://element.eleme.cn/#/zh-CN/component/infiniteScroll提供的无限滚动,具体使用方法,请看官方文档。这里说一下个人觉得不适用于表格的原因。但不确定自己的想法是否对的,如有错误,希望大佬们来指教~

       el-element中的无限滚动似乎是针对元素的添加才有效果的,也就是如果我每次只是给表格添加数据,他加载完就不会停留在上一次的浏览记录,而是在底部,导致会持续在加载(除非手动设置滚动条),直到数据加载完毕后才停止事件的执行。但是如果你是直接循环元素,类似<div  v-for="item  in list"></div>每次加载完就会停留在上一次的浏览记录了。

3、vue-loadmore 和 vue-mugen-scroll

使用文档链接:vue-loadmore、vue-mugen-scroll

写到这里有点累了,大家自己去看看文档吧,哈哈哈~

Vue3 + Ant Design Vue 实现表格无限滚动加载(自定义指令版) / 防抖函数}, delay)// loadMore 指令},},// helper:绑定滚动事件if (!// 移除旧的监听if (!// ✅ 提前触发位置// 兼容异步 Promise})} else {}, delay)})// 导出函数(在 main.js 中注册)通过自定义指令,我们可以在 Vue3 + Ant Design Vue 表格中实现优雅的滚动加载功能:支持防抖、目标容器选择、加载禁用;与表格分页逻辑结合,用户体验更好; 阅读详情

相关推荐

Vue中的无限加载vue-infinite-loading的方法

本文介绍了Vue中的无限加载vue-infinite-loading的方法,分享给大家,具体如下: 注意:vue-infinite-loading2.0只能在Vue.js2.0中使用。如果你想在Vue.js1.0中使用,请安装vue-infinite-loading1.3版本 如何安装 npm install vue-infinite-loading --save 导入方式 es6模块导入方式 import InfiniteLoading from 'vue-infinite-loading'; export default { components: { InfiniteLoa

vue-infinite-loading的使用方法

vue-infinite-loading 在项目中有的时候会使用分页,有的时候会使用下拉加载数据,分页就用element ui的分页就可以了,下拉加载就可以用vue-infinite-loading。 import InfiniteLoading from "vue-infinite-loading"; components: { InfiniteLoading, fileUpload, discernItem, discernSubtitle }, <!-- 下拉加载开始 -->

lalaladamowang的博客 4797

vue-infinite-loading2.0 中文文档详解

简介 这是一个使用在Vue.js中的无限滚动插件,它可以帮助你快速创建一个无限滚动列表。 特点 移动端支持友好 兼容任何一个可以滚动的元素 有不同的旋转器可以作为加载动画 支持加载后显示结果 支持两个方向的无限加载 <p id=”installation”>安装</p> <strong>注意:vue-infinite-loading2.0只能在Vue.js2.0中使用。如果你想在Vue.js1.0中使用,请安装vue-infinite-loading1.3版本</strong> npm install vue-infinite-loading --save 导入方式 es

Vue无限加载vue-infinite-loading使用详解

如何安装 npm install vue-infinite-loading --save 导入方式 es6模块导入方式 import InfiniteLoading from 'vue-infinite-loading'; export default { components: { InfiniteLoading }, }; CommonJS 模块导入方式...

weixin_42415974的博客 4356

Windows版本Carla(含RoadRunner插件)源码安装+RoadRunner地图导入

通过跳转浏览器账号密码登录github,不要选择Fine-grained personal access tokens,在git clone时会显示非授权,也不要使用Windows凭据!核心指令:编译PythonAPI–make PythonAPI,,编译Server–make launch,封装”游戏“–make package。完成安装后,在已安装->2022版本右侧->更多->导入配置,选择配置文件(需将配置文件内容更新为手册内容,如下图)->详细信息,更新。不要修改版本,执行上面指令即可!

winnizap的博客 1467

海康威视 2DC 系列球机手机直连实用教程

海康威视2DC系列球机手机直连教程:首先确认设备支持直连功能并下载官方"海康互联"App;通过网线连接球机与路由器,使用SADP软件调整IP至同一网段;在App中添加设备并激活,完成调试即可远程查看监控画面。常见问题包括部分型号需远程解锁、网络连接异常等,可通过检查网络环境、联系客服等方式解决。本教程提供从准备到连接的完整指引,助您轻松实现手机监控管理。

海康威视技术支持 5411

Vue element-ui表格数据懒加载

大部分参考Angrybird233的简书文章,自己细节实现一下 引入element-ui npm 的方式安装 element-ui npm i element-ui -S 在 main.js 中写入以下内容: import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) 新建Table.vue 主要就是tableListener()方法,监听dom的sc.

物联网三分钟 1万+

Xilinx UltraScale+ FPGA实战:手把手教你实现USB3.0设备开发(附原理图+代码)

本文详细介绍了如何使用Xilinx UltraScale+ FPGA开发USB3.0设备,涵盖硬件设计、Vivado工程配置、Petalinux系统定制及功能测试全流程。通过实战案例和优化技巧,帮助开发者快速掌握高速数据传输实现方法,提升嵌入式系统开发效率。

weixin_29159995的博客 209

vue 实现数据滚动显示_vue elementUI table表格数据 滚动懒加载的实现方法

在项目中遇到了一个性能问题vue+elementUI table表格展示数据,当数据很多的时候,不能一页显示完,同时一次请求数据量太大,会增加网页渲染的时间,影响体验,这个时候常常有两种方法处理,1、分页,如下2、如果我不想分页,又想在一页显示全部数据呢?这个时候其实就可以用数据懒加载了如下一开始表格只显示31行数据当将滚动条拉到低的时候,就会再加载31条数据,如果剩下的数据不...

weixin_39948824的博客 4578

DolphinScheduler租户配置踩坑实录:手把手教你修复‘tenant not exists‘报错

本文深度解析DolphinScheduler的租户模型,并提供一套从界面到数据库的系统性排查流程,手把手教你修复常见的'tenant not exists'报错。文章揭示了该错误的本质是用户与租户数据关联不一致,并给出了通过UI或SQL更新的具体修复方案,同时分享了根因分析与预防措施,帮助用户从根本上理解和避免此类问题。

2w3e4r5t6y的博客 541

挑战第七天:Llamaindex RAG 实践

安装python 依赖包,并安装 Llamaindex和相关包以及Sentence Transformer 模型。进入开发机后,创建新的conda环境,命名为。镜像,然后在资源配置中,使用。的选项,然后立即创建开发机器。后,点击 选择镜像 使用。然后安装相关基础依赖。

weixin_53579823的博客 728

vue——antd+elementUi——table表格实现滚动加载(分页滚动加载)——技能提升

vue——antd+elementUi——table表格实现滚动加载(分页滚动加载)——技能提升

yehaocheng520的博客 4440

Zemax中场曲与畸变图的深度解析与应用场景对比

本文深度解析了Zemax中场曲/畸变图与网格畸变图的核心原理、计算逻辑与适用场景。通过对比常规成像镜头、扫描镜头、鱼眼镜头及变形宽银幕镜头等实际案例,详细阐述了如何根据系统对称性、视场角及核心需求选择正确的分析工具与畸变评价标准,为光学设计中的畸变诊断与优化提供清晰指导。

sand8的博客 482

【VUE】element-ui表格 实现滚动到底部加载更多数据

<template> <!-- 滚动加载 --> <div class="wrap"> <el-table height="800" :data="visibleData" style="width: 100%" v-load-more.expand="{func: loadmore, target: '.el-table__body-wrapper', delay: 300}" :load-more-disab

Dan的博客 7307

基于555定时器的呼吸灯电路

呼吸灯是指LED灯在芯片的控制下完成由亮到暗的逐渐变化,感觉就像人在呼吸,其广泛使用在手机上,起到一个通知提醒的作用。呼吸灯在许多灯光装饰上也有大量使用,如音响、汽车广告牌等,在生活中较为常见。...

qq1074237849的博客 9496

一句话看懂 vibing-steampunk

摘要: vibing-steampunk(vsp)是一个连接SAP ABAP开发工具(ADT)与AI编码代理(如Claude、GitHub Copilot)的桥梁,通过MCP协议实现自动化代码读写、调试和部署。它利用ADT API直接访问SAP系统,绕过传统GUI操作,支持ECC和S/4HANA等环境。工具提供包分析、依赖检查、LUW行为识别等功能,显著提升ABAP项目维护效率。其创新Hyperfocused模式和方法级编辑大幅降低token消耗,而上下文压缩技术则优化了AI对ABAP代码的理解能力,特别适

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 114

vue 表格无限滚动下拉加载数据vue-infinite-loading

1. 下载vue-infinite-loading npm installvue-infinite-loading --save 2.在需要使用的文件中引入 import InfiniteLoading from 'vue-infinite-loading'; 3.在该文件中注入组件 components: { InfiniteLoading, } 4.在表格底部插入 <el-table :data="tableData" v-loading="lo...

weixin_50606255的博客 1505

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

vue 2表格滚动加载

label="登录次数"label="排名"// 使用 Set 来去重。// 使用passive监听器提高滚动性能。// 表格下拉滚动加载更多。

huangjinsheng1988的专栏 1046

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

vue实现滚动加载

vue实现多个场景下的滚动加载

wytraining 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ant design vue中table表格滚动加载

在ant design vue组件库中,并没有提供可以直接监听table滚动的api,在此我使用了原生js去对table表格赋予一个监听表格滚动事件。在处理一写数据量特别大的情况下,我们不能把后端的数据一次性全部拿到前端在table表格中展示,为了考虑性能优化,使用了滚动加载表格数据。做这个功能之前,我们首先需要获取到table滚动到底部或者顶部时去触发方法。首先我想要对表格进行滚动加载,接口需要我传递的数据为行数,传递了行数来规定从第几行开始返回部分数据,具体返回数据的条数需要根据接口来定。

weixin_71329368的博客 5330

vue el-table表格数据,不分页,鼠标滚动实现数据懒加载

当前有一个需求,页面不分页,又想在一页显示全部数据,这个时候其实就可以用数据懒加载。 随鼠标滚动到滚动条末尾,自动加载下一页的数据。 create的时候默认加载20条数据 这里差不多到末端了 鼠标滑到末端后,触发加载第二页数据 代码实现: 先定义个table (getPageBodyHeight 方法是我通过页面自适应监听页面宽高变化,之前帖子有栗子,计算table的高度,简单点的可以自己设置固定高度) <el-table border .

Seven71111的博客 1万+

elementui表格下拉_vue elementUI table表格数据 滚动懒加载的实现方法

在项目中遇到了一个性能问题vue+elementui table表格展示数据,当数据很多的时候,不能一页显示完,同时一次请求数据量太大,会增加网页渲染的时间,影响体验,这个时候常常有两种方法处理,1、分页,如下2、如果我不想分页,又想在一页显示全部数据呢?这个时候其实就可以用数据懒加载了如下一开始表格只显示31行数据当将滚动条拉到低的时候,就会再加载31条数据,如果剩下的数据不足31,那就加载剩下...

weixin_42519733的博客 3983

Vue滚动表格教程

Vue滚动表格教程 项目介绍 Vue滚动表格是一款专为Vue.js设计的高效数据展示组件,由Richard Tallent开发并维护。该组件旨在提供一个可自定义、高性能的解决方案,用于处理大量数据的列表或表格视图,尤其是在需要垂直或水平滚动时。它优化了渲染流程,以确保即使是大规模数据集也能保持流畅的用户体验。 特点包括: 高性能的虚拟滚动,减少DOM节点数量。 灵活的列配置和数据绑定。 可定制...

gitblog_00729的博客 1029

Vue Element表格实现滚动加载

需求背景 最近有个需求,需要根据用户输入的数字,生成对应行数的表格数据,比如输入10,那就是要生成一个10行的表格,1000就是1000行,表格内容不算复杂,感觉还是一个蛮简单的需求,谁知做着就发现问题了。就是当输入的数字超过1000的时候,明显感觉表格加载的有点卡顿,于是开始寻找解决之法。 解决思路 首先查看生成1000行表格数据所需的时间,由于计算过程是由js实现的,所以可以用 console.time('time') console.timeEnd('time'); 来查看代码执行耗时,time和

李公子的博客 4077

vue 表格中有列需要异步加载_VUE项目中如何实现表格数据的懒加载

VUE项目中如何实现表格数据的懒加载vue+elementUI table表格展示数据,当数据很多的时候,不能一页显示完,同时一次请求数据量太大,会增加网页渲染的时间,影响体验,这个时候常常有两种方法处理,1、分页处理如果不想分页,可以在数据请求到后值渲染10或20条数据,然后再使用setTimeout定时器加一定的延时,再将其余的数据循环push到当前的表格数据中例如:let tableData...

weixin_39932611的博客 1202

element 表格自动滚动加载数据_表格滚动加载的问题

今天老大让我给之前的表格添加表格滚动加载,而且还要固定表头,第一感觉就是先到element-ui的官网例子看看,固定表头主要用到了 height 这个属性,还有最大高度这个属性max-height 主要是设置超过这个高度就会出现滚动条,height 是设置表格的高度,让表格的表头固定在最上面。只要在el通过设置max因为我们是第二次封装 element-ui 的一些组件,需要哪些方法,属性,就足够...

weixin_39713335的博客 1509
上一篇: 解决Node.js读取MySQL的时间格式不对
Coloryi
博客等级 码龄9年 3粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值