ant design vue中table表格滚动加载实现思路

 更新时间:2024年07月05日 11:35:39   作者:ZJ_.  
在处理一写数据量特别大的情况下,我们不能把后端的数据一次性全部拿到前端在table表格中展示,为了考虑性能优化,使用了滚动加载表格数据,这篇文章主要介绍了ant design vue中table表格滚动加载实现思路,需要的朋友可以参考下

在ant design vue组件库中,并没有提供可以直接监听table滚动的api,在此我使用了原生js去对table表格赋予一个监听表格滚动事件。

在处理一写数据量特别大的情况下,我们不能把后端的数据一次性全部拿到前端在table表格中展示,为了考虑性能优化,使用了滚动加载表格数据。做这个功能之前,我们首先需要获取到table滚动到底部或者顶部时去触发方法。

首先我想要对表格进行滚动加载,接口需要我传递的数据为行数,传递了行数来规定从第几行开始返回部分数据,具体返回数据的条数需要根据接口来定。

在此功能中,我每次需要获取100条数据,我想要每次table表格滚动到底部的时候,获取接下来的100条,或者滚动到顶部时获取上面的100条数据,但是大家也可以根据自己的需求来去传递想要的条数。

table表格:

<a-table 
	ref="myTable" 
	size="middle" 
    :columns="columns" 
    :data-source="dataSource" 
    :pagination="false"
    :scroll="{ y: 'calc(100vh - 160px)' }" 
    :loading="loading">
</a-table>

赋予表格滚动事件:

  • 使用 ref 来获取到table表格
  • 当表格存在时,再去对表格进行操作,否则可能导致获取不到而报错
  • 使用 tableComponent.$el.querySelector('.ant-table-body') 来获取表格组件内部具有类名 ant-table-body 的容器元素。这个容器通常用于包裹表格的内容,并且可能具有滚动条
  • 给表格添加一个滚动事件监听器,当表格容器发生滚动时,就会调用 handleScroll 方法
mounted() {
  this.$nextTick(() => {
    const tableComponent = this.$refs.myTable;
    if (tableComponent) {
      const tableContainer = tableComponent.$el.querySelector('.ant-table-body');
      tableContainer.addEventListener('scroll', this.handleScroll);
    }
  })
},

在给表格添加滚动事件监听的时候,同时要在页面的销毁钩子函数中移除对 table 添加的事件监听,以免会出现不必要的错误,保证代码的稳定性。

beforeUnmount() {
   this.$nextTick(() => {
     const tableComponent = this.$refs.myTable;
     if (tableComponent) {
       const tableContainer = tableComponent.$el.querySelector('.ant-table-body');
       tableContainer.removeEventListener('scroll', this.handleScroll);
     }
   })
 },

滚动事件:

到现在为止,当 table 表格滚动的时候,就会触发 handleScroll 方法,下面是 handleScroll 方法:

handleScroll() { //滚动的事件
     const tableComponent = this.$refs.myTable;
     const tableContainer = tableComponent.$el.querySelector('.ant-table-body');
     const scrollPosition = tableContainer.scrollTop;
     const isAtTop = scrollPosition === 0;
     if (isAtTop) {
        // 已滚动到顶部,执行相应操作
       this.render(-100)
     }
     const isAtBottom = tableContainer.scrollHeight - scrollPosition === tableContainer.clientHeight;
     if (isAtBottom) {
       // 已滚动到底部,执行相应操作
       this.render(100)
     }
 },
  • 使用this.$refs.myTable获取表格组件的引用,并使用tableComponent.$el.querySelector('.ant-table-body')获取表格容器元素的引用。这些步骤与前面的代码段相同。
  • 接下来,它获取表格容器元素的滚动位置,使用tableContainer.scrollTop来获取当前滚动的垂直位置。
  • 然后,它通过比较滚动位置是否为0来判断是否滚动到了顶部,将结果保存在isAtTop变量中。
  • 如果滚动到了顶部(即isAtTop为真),调用了render(-100)方法,并将参数-100传递给它,在render方法中调用了接口获取前100条数据
  • 接下来,通过比较表格容器元素的总高度减去滚动位置是否等于容器元素的可见高度,来判断是否滚动到了底部。这个条件判断保存在isAtBottom变量中。
  • 如果滚动到了底部(即isAtBottom为真),调用了render(100)方法,并将参数100传递给它,调用render方法中的接口获取后100条数据

总之,这段代码的作用是在滚动事件发生时,检查是否滚动到了顶部或底部,并且相应的请求服务来拿到我们想要的数据。这样就成功啦!

到此这篇关于ant design vue中table表格滚动加载实现思路的文章就介绍到这了,更多相关ant design vue滚动加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中全局路由守卫中替代this操作(this.$store/this.$vux)

    vue中全局路由守卫中替代this操作(this.$store/this.$vux)

    这篇文章主要介绍了vue中全局路由守卫中替代this操作(this.$store/this.$vux),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 关于json-bigint处理大数字问题

    关于json-bigint处理大数字问题

    这篇文章主要介绍了关于json-bigint处理大数字问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Vue中methods实现原理是什么

    Vue中methods实现原理是什么

    methods是如何绑定this的 methods绑定上下文执行环境是通过bind来进行的呢,本文给大家介绍Vue中methods实现原理是什么,感兴趣的朋友一起看看吧
    2023-11-11
  • 基于Vue el-autocomplete 实现类似百度搜索框功能

    基于Vue el-autocomplete 实现类似百度搜索框功能

    本文通过代码给大家介绍了Vue el-autocomplete 实现类似百度搜索框功能,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • 如何写一个 Vue3 的自定义指令

    如何写一个 Vue3 的自定义指令

    这篇文章主要介绍了如何写一个 Vue3 的自定义指令,如果我们想在 Vue.js 的项目中实现图片懒加载,那么用自定义指令就再合适不过了,那么接下来就让我手把手带你用 Vue3 去实现一个图片懒加载的自定义指令 v-lazy,需要的朋友可以参考一下
    2022-01-01
  • 解决vue props传Array/Object类型值,子组件报错的情况

    解决vue props传Array/Object类型值,子组件报错的情况

    这篇文章主要介绍了解决vue props传Array/Object类型值,子组件报错的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • vue+elementUI如何实现顶部路由标签跳转

    vue+elementUI如何实现顶部路由标签跳转

    这篇文章主要介绍了vue+elementUI如何实现顶部路由标签跳转问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue3项目中各个文件的作用详细介绍

    vue3项目中各个文件的作用详细介绍

    在Vue3项目中,通常会有以下一些常见的目录和文件,下面这篇文章主要给大家介绍了关于vue3项目中各个文件的作用,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • Vue项目中使用百度地图api的详细步骤

    Vue项目中使用百度地图api的详细步骤

    在之前的一个小项目中,用到的显示当地的地图功能,下面这篇文章主要给大家介绍了关于Vue项目中使用百度地图api的详细步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • 利用v-viewer图片预览插件放大需要预览的图片

    利用v-viewer图片预览插件放大需要预览的图片

    本文介绍了v-viewer插件的安装和使用步骤,包括npm安装、在main.js文件中全局引入,以及常用的三种使用方式,文章提供了简单的布局页面效果,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10

最新评论