【前端】vue3+elment plus实现table表格右侧滑动分页加载

简介: vue3+elment plus实现table表格右侧滑动分页加载

具体要实现的需求

前段时间实现实现一个表格功能由于一行数据表较多,所以用到el-table表格固定表头,固定头两列和最后一列,底部有左右滑动的滚动条。一页展示二十条数据,需要实现滚动分页功能,table滚动条到底部的时候可自动加载第二页数据,在底部加载第二页数据的时候要有loading加载样式,底部没有用到分页Pagination 标签分页样式。在实现的过程也遇到很多的坑,还好最后把功能实现了,在这里做下总结。大家有好的方法和建议可以在评论区交流。

Element plus 查询table表格组件demo

打开elment plus组件找到table表格可以看到里面有固定列demo代码,但是demo使用跟我们业务需求有一定的差距,需要加入自己的业务需求代码处理才能是吸纳相应的功能,一开始参考了elment plus里面Scrollbar 滚动条标签来做,并没有成功实现。后来换了一种方式来做,代码就在下面。
在这里插入图片描述

### elment 监测table右侧滚动条到底部代码
elment和elment plus中加入addEventListener监听还是有区别的,请看代码你就明白了

this.$refs.multipleTable.bodyWrapper.addEventListener('scroll', (res) => {
          let height = res.target
          let clientHeight = height.clientHeight
          let scrollTop = height.scrollTop
          let scrollHeight = height.scrollHeight
          if (clientHeight + scrollTop + 50> scrollHeight) {
            this.currentPage += 1;
            this.getDataList()
          }
        })

elment plus监测table右侧滚动条到底部代码

  this.$nextTick(() => {
      document.querySelector(".el-scrollbar__wrap.el-scrollbar__wrap--hidden-default").addEventListener('scroll', (res: any) => {
        let scrollTop = res.target.scrollTop;
        let winHeight = res.target.clientHeight;
        let scrollHeight = res.target.scrollHeight;
        if (scrollTop + winHeight + 50 > scrollHeight && !this.busyScroll) {
          this.currentPage += 1;
          this.getDataList()
        }
      })
    })

替换loading加载样式

替换loading样式代码,vue样式代码用到了v-sort槽标签处理。

       <template v-slot:append style="text-align: center">
          <div class="table-loading" style="height: 50px;">
          </div>
        </template>
      </el-table>

调用 this.getDataList()方法loading为true,接口返回是loading为this.loading = false;,关闭loading加载。

 getDataList() {
 this.loading = true;
    const listLoading= ElLoading.service({
      target: document.querySelector(".table-loading") as HTMLElement,
      lock: true
    })
     const pageParam = {
      pageIndex: this.currentPage,
      limit: this.pageSize,
      param: this.param
    };
    http.post('localhost/page/list', pageParam).then(res => {
      this.list = [...this.lmodelList, ...res.data.data];
      this.totalPages = res.data.totalPages;
      this.loading = false;
      listLoading.close()
    })
    }

总结

在前端的路上要不断的学习,实践,总结。这一次做一次整理总结一下。方便后期遇到相似的问题的可以有参考思路。也便于其他编程伙伴查阅学习。欢迎互相关注交流。

相关文章
|
22天前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
|
9天前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
9天前
|
前端开发 JavaScript 数据管理
React与Vue:两大前端框架的较量与选择策略
【10月更文挑战第23天】React与Vue:两大前端框架的较量与选择策略
|
1月前
|
前端开发 JavaScript 关系型数据库
前端的全栈之路:基于 Vue3 + Nest.js 全栈开发的后台应用
这篇文章介绍了一个名为Vue3Admin的全栈后台应用,前端基于SoybeanAdmin二次开发,后端基于Nest.js。主要使用了Vue3.5、AntDesignVue、UnoCSS、Pinia等前端技术栈,以及Nest.js、PostgreSQL、Prisma等后端技术栈。文章详细描述了系统的功能设计,包括动态国际化语言配置、登录用户操作日志、用户和角色权限映射、动态路由菜单、消息公告发布及前端业务功能等。同时,也提供了项目运行所需的环境和依赖,以及如何拉取代码、安装依赖和启动项目的方法。最后,文章展示了项目的演示图,并对项目进行了总结,指出项目未经严格测试,仅供学习交流使用。
前端的全栈之路:基于 Vue3 + Nest.js 全栈开发的后台应用
|
15天前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
|
15天前
|
监控 JavaScript 前端开发
前端的混合之路Meteor篇(六):发布订阅示例代码及如何将Meteor的响应数据映射到vue3的reactive系统
本文介绍了 Meteor 3.0 中的发布-订阅模型,详细讲解了如何在服务器端通过 `Meteor.publish` 发布数据,包括简单发布和自定义发布。客户端则通过 `Meteor.subscribe` 订阅数据,并使用 MiniMongo 实现实时数据同步。此外,还展示了如何在 Vue 3 中将 MiniMongo 的 `cursor` 转化为响应式数组,实现数据的自动更新。
|
21天前
|
前端开发 JavaScript 安全
在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
57 4
|
28天前
|
JavaScript 前端开发 Python
django接收前端vue传输的formData图片数据
django接收前端vue传输的formData图片数据
26 4
|
27天前
|
JavaScript 前端开发 Java
VUE学习四:前端模块化,ES6和ES5如何实现模块化
这篇文章介绍了前端模块化的概念,以及如何在ES6和ES5中实现模块化,包括ES6模块化的基本用法、默认导出与混合导出、重命名export和import,以及ES6之前如何通过函数闭包和CommonJS规范实现模块化。
68 0
VUE学习四:前端模块化,ES6和ES5如何实现模块化
|
9天前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】 React与Vue:前端框架的巅峰对决与选择策略