当前位置: 首页 > ds >正文

antd-vue - - - - - table实现滚动加载数据

table实现滚动加载数据

代码如下:

<template><a-tableref="tableRef":loading="loading"bordered:scroll="{y: `calc(100vh / 2)`,scrollToFirstRowOnChange: true,}":dataSource="dataSource":columns="columns":pagination="false"></a-table>
</template>
<script>
import { reactive, ref, toRefs, nextTick, onMounted, onUnmounted } from "vue";
import { getTableList } from "@/api/getTableList.js";
import throttle from "lodash/throttle";
export default {name: "rolling-to-load-data",setup() {// 定义key,用以获取table标签元素const tableRef = ref(null);// table数据const tableConfig = reactive({loading: false,total: 0,pageNum: 1,columns: [],dataSource: [],});const getList = () => {tableConfig.loading = true;const params = {page: tableConfig.pageNum,};getTableList(params).then((res) => {const { columns: _columns, dataSource, total } = res.data;Object.assign(tableConfig, {columns: _columns,dataSource:tableConfig.pageNum == 1? dataSource: [...tableConfig.dataSource, ...dataSource],total,});}).finally(() => {tableConfig.loading = false;});};let lastScrollTop = 0; // 记录上一次滚动的位置// 定义滚动监听事件处理const handleTableScroll = throttle((event) => {const { scrollTop, scrollHeight, clientHeight } = event.target;if (scrollTop > lastScrollTop &&scrollHeight - scrollTop - clientHeight < 5) {// 如果还有数据没加载,则继续加载const { dataSource, total } = tableConfig;if (dataSource.length < total) {tableConfig.pageNum += 1;getList();} else {console.log("已加载全部数据");}}lastScrollTop = scrollTop <= 0 ? 0 : scrollTop; // 更新滚动位置}, 500);// 添加监听事件onMounted(() => {getList();nextTick(() => {const tableBody = tableRef.value.$el.querySelector(".ant-table-body");if (tableBody) {tableBody.addEventListener("scroll", handleTableScroll);}});});// 组件卸载时移除onUnmounted(() => {const tableBody = tableRef.value?.$el?.querySelector(".ant-table-body");if (tableBody) {tableBody.removeEventListener("scroll", handleTableScroll);}});return {tableRef,...toRefs(tableConfig),getList,};},
};
</script>
http://www.xdnf.cn/news/12649.html

相关文章:

  • 什么是上下文切换?代价在哪里?
  • C++ if语句完全指南:从基础到工程实践
  • API是什么意思?如何实现开放API?
  • 开源语义分割工具箱mmsegmentation基于Lovedata数据集训练模型
  • 你如何确保监控系统的可用性?
  • python算法-移动零盛最多的水--Day021
  • WinCC学习系列-变量模拟器(WinCC TAG Simulator )
  • Wan2.1环境的安装,以及使用产品图片合成展示视频
  • 嵌入式主板详解与选购指南
  • 关于dropbear ssh服务
  • 如何让其他品牌更难转化走我们的用户?
  • thinkphp-queue队列随笔
  • Dubbo学习(一):Dubbo介绍
  • C#使用MindFusion.Diagramming框架绘制流程图(1):基础类型
  • 服务器出现故障怎么办?快速排查与解决方法
  • dfn序的应用 (P1273 有线电视网题解)
  • ROS1: 使用rosbag的方式将点云topic保存为pcd文件
  • 中小制造企业的数字化转型,如何控制工业软件应用成本?
  • Docker 容器化基础:镜像、容器与仓库的本质解析
  • keil编译工程,结合map文件和bin文件,实测C语言中不同类型的变量存储在不同的内存区域
  • 柴油发电机组接地电阻柜的作用
  • yolov8自训练模型作为预训练权重【增加新类别】注意事项
  • 我用Amazon Q写了一个Docker客户端,并上架了懒猫微服商店
  • Web 3D协作平台开发案例:构建制造业远程设计与可视化协作
  • PC端直接打印功能(包括两张图片合并功能)
  • html 滚动条滚动过快会留下边框线
  • 2022年CSP-S1提高级第一轮题解
  • C++11新增标准讲解(上)
  • 【递归、搜索与回溯】专题三 穷举vs暴搜vs回溯vs剪枝
  • 【Vue】指令补充+样式绑定+计算属性+侦听器