vue3 通过自定义指令在table中滚动加载数据

news/2024/12/4 7:23:06/

1.在utils文件中新建一个loadMore.ts文件。

import type { Directive, App } from 'vue';const debounce = function (func: any, delay: any) {let timer: any = nullreturn function () {if (timer) clearTimeout(timer)timer = nulllet self = thislet args = argumentstimer = setTimeout(() => {func.apply(self, args)}, delay)}
}const loadMore: Directive = {mounted (el: any, binding: any, vnode: any) {const { expand } = binding.modifiers// 使用更丰富的功能,支持父组件的指令作用在指定的子组件上if (expand) {/*** target 目标DOM节点的类名* distance 减少触发加载的距离阈值,单位为px* func 触发的方法* delay 防抖时延,单位为ms* load-more-disabled 是否禁用无限加载*/let { target, distance = 0, func, delay = 200 } = binding.valueif (typeof target !== 'string') returnlet targetEl = el.querySelector(target)if (!targetEl) {console.log('找不到容器')return}binding.handler = function () {const { scrollTop, scrollHeight, clientHeight } = targetEllet disabled = el.getAttribute('load-more-disabled')disabled = vnode[disabled] || disabledif (scrollHeight <= scrollTop + clientHeight + distance) {if (disabled == 'true') returnfunc && func()}}targetEl.addEventListener('scroll', binding.handler)} else {binding.handler = debounce(function () {const { scrollTop, scrollHeight, clientHeight }  = elif (scrollHeight === scrollTop + clientHeight) {binding.value && binding.value()}}, 200)el.addEventListener('scroll', binding.handler)}},unmounted (el: any, binding: any) {let { arg } = binding// 使用更丰富的功能,支持父组件的指令作用在指定的子组件上if (arg === 'expand') {/*** target 目标DOM节点的类名* offset 触发加载的距离阈值,单位为px* method 触发的方法* delay 防抖时延,单位为ms*/const { target } = binding.valueif (typeof target !== 'string') returnlet targetEl = el.querySelector(target)targetEl && targetEl.removeEventListener('scroll', binding.handler)targetEl = null} else {el.removeEventListener('scroll', binding.handler)el = null}}
};export function setupLoadMoreDirective(app: App) {app.directive('loadMore', loadMore);
}export default loadMore;

2.在main.ts引入该文件,挂在到app上。

import { setupLoadMoreDirective } from '@/utils/loadMore';const app = createApp(App);
setupLoadMoreDirective(app)

3.在vue文件中加上该指令

  <el-tablev-loadMore.expand="{func: loadmore, target: '.el-scrollbar__wrap', delay: 300}":load-more-disabled="false"
</el-table>
const loadmore = () => {console.log(2);
}

http://www.ppmy.cn/news/617618.html

相关文章

Covex combination和affine combination

Covex combination和affine combination是两种常见的线性组合方法。 Covex combination&#xff08;凸组合&#xff09;是指在线性组合中&#xff0c;所有权重&#xff08;coefficients&#xff09;取非负值且总和为1的情况。也就是说&#xff0c;对于给定的一组向量或点集合&…

PTA 7-67 摘苹果 (5分)

陶陶家的院子里有一棵苹果树&#xff0c;每到秋天树上就会结出很多苹果。苹果成熟的时候&#xff0c;陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳&#xff0c;当她不能直接用手摘到苹果的时候&#xff0c;就会踩到板凳上再试试。 现在已知每个苹果到地面的高度&#xff0c;以…

苹果5完美越狱_iOS 9.3.5如何越狱 iOS 9.3.5免费越狱教程「步骤详解」

iOS越狱开发者Siguza和tihmstar目前正式发布了iOS 9.3.5的越狱工具。iOS 9.3.5的越狱为不完美越狱&#xff0c;重启之后越狱状态会被清除。此外&#xff0c;越狱工具仅支持运行iOS 9.3.5的32位设备&#xff0c;64位设备无法支持。一起来看看iOS 9.3.5越狱教程。 iOS 9.3.5越狱教…

洛谷 P5703 【深基2.例5】苹果采购

题目链接 P5703 【深基2.例5】苹果采购 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 现在需要采购一些苹果&#xff0c;每名同学都可以分到固定数量的苹果&#xff0c;并且已经知道了同学的数量&#xff0c;请问需要采购多少个苹果&#xff1f; 输入格式 输入…

苹果5越狱教程_苹果新越狱工具发布,支持iOS 13最新版,详细安装教程看这里...

11月8日,苹果发布iOS 13.2.2更新,旨在解决后台频繁关闭问题,同时iPad OS也同步推出13.2.2版本。 11月11日,漫长的等待终于结束,作为使用checkm8漏洞的首个版本,万众期待的苹果iOS 13的Checkra1n越狱工具终于发布了。 在越狱之前,你还需要准备一台Mac电脑(暂不清楚其他操…

苹果iOS 5系统新功能全揭秘

据国外媒体报道&#xff0c;iOS 5更新已全面开放&#xff0c;新版操作系统适合所有苹果iPhone、iPad、iPod touch设备。iOS 5是苹果公司自09年发布iPhone OS 3操作系统以来最大的一次更新&#xff0c;带来超过200个新功能。 这些新功能中包含一些显著的、重大更新如整合Twitte…

苹果5完美越狱_A12A13全新越狱工具发布,不需要电脑引导的半完美越狱

苹果在2020年2月13日关闭了iOS 13.3的系统验证通道&#xff0c;除了iOS 13在刚发布之后那几个版本出现了“不能等待”的问题以及苹果自身的开发进程外&#xff0c;就是因为现版本存在影响安全性的漏洞&#xff0c;苹果才会关闭通道。这种内核漏洞却是越狱工具开发者的宝贝&…

P5703【深基2.例5】苹果采购

P5703【深基2.例5】苹果采购 题目描述 现在需要采购一些苹果&#xff0c;每名同学都可以分到固定数量的苹果&#xff0c;并且已经知道了同学的数量&#xff0c;请问需要采购多少个苹果&#xff1f; 输入格式 输入两个不超过 10^9 正整数&#xff0c;分别表示每人分到的数量…