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

2023-11-20

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

import type { Directive, App } from 'vue';

const debounce = function (func: any, delay: any) {
  let timer: any = null
  return function () {
    if (timer) clearTimeout(timer)
    timer = null
    let self = this
    let args = arguments
    timer = 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.value
      if (typeof target !== 'string') return
      let targetEl = el.querySelector(target)
      if (!targetEl) {
        console.log('找不到容器')
        return
      }
      binding.handler = function () {
        const { scrollTop, scrollHeight, clientHeight } = targetEl
        
        let disabled = el.getAttribute('load-more-disabled')
        disabled = vnode[disabled] || disabled
        if (scrollHeight <= scrollTop + clientHeight + distance) {
          if (disabled == 'true') return
          func && func()
        }
      }
      targetEl.addEventListener('scroll', binding.handler)
    } else {
      binding.handler = debounce(function () {
        const { scrollTop, scrollHeight, clientHeight }  = el
        if (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.value
        if (typeof target !== 'string') return
        let 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-table
            v-loadMore.expand="{func: loadmore, target: '.el-scrollbar__wrap', delay: 300}"
            :load-more-disabled="false"
</el-table>
const loadmore = () => {
  console.log(2);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3 通过自定义指令在table中滚动加载数据 的相关文章

  • vue3中ts全局声明再.vue文件中显示no-undef

    显示错误xxx is not defined eslintno undef 解决方法 参考 Why Eslint don t see global TypeScript types in vue files no undef 在 eslin
  • Vue3之watch和watchEffect实战总结

    watch和watchEffect都是vue3中的监听器 但是在写法和使用上是有区别的 主要是介绍一下watch和watchEffect的使用方法以及他们之间的区别 watch 的工作原理 侦听特定的数据源 并在回调函数中执行副作用 它默认
  • vue3 hooks的简单使用 组合式函数

    想当于vue2的mixins 我们可以使用hooks代替mixins 官方文档 组合式函数 hooks 特点 vue3 中的 hooks 函数相当于 vue2 里面的 mixin 混入 不同在于 hooks 是函数 vue3 中的 hook
  • vite 配置自动补全文件的后缀名

    vite 不建议自动补全 文件的后缀名的 const Home gt import views Home vue 文件是必须要加上 vue 的后缀名的 如果 想要像 webpack 一样的不用写 可以在vite config js中配置如下
  • vue3+vite中使用path-to-regexp以及相关的报错问题

    前言 path to regexp 该方法的作用是把字符串转为正则表达式 一般我们使用动态匹配路由的时候会用到这个 1 介绍path to regexp 更多点我查看 pathToRegexp pathToRegexp foo bar 打印
  • vue3项目修改浏览器的项目icon小图标

    修改vue3项目的浏览器的图标 vue2修改图标
  • Vue3+Vite项目配置Eslint+Prettier+Husky+Lint-Staged+Commitlint

    Eslint 配置 ESLint 是一个插件化并且可配置的 JavaScript 语法规则和代码风格的检查工具 ESLint 能够帮你轻松写出高质量的 JavaScript 代码 1 建议 vscode 安装 Eslint 的插件 这个插件
  • uni-app微信小程序开发自定义select下拉多选内容篇

    欢迎点击领取 前端面试题进阶指南 前端登顶之巅 最全面的前端知识点梳理总结 分享一个使用比较久的 技术框架公司的选型 uni app uni ui vue3 vite4 ts 需求分析 微信小程序 uni ui内容 1 创建一个自定义的下拉
  • vue3+vite 全局组件注册与使用

    前言 vite和我们的webpack是不同的 这里没办法用require 但是他也有自己的引入文件的方法 是 import meta glob 实现效果 vite方法官方入口 功能 Vite 官方中文文档下一代前端工具链https cn v
  • Vue3.0 PC端滑块拼图验证,配合后端验证

    Vue3 0 PC端滑块拼图验证 配合后端验证 简介 最近因为产品需要实现一个滑块拼图验证 而且需要配合后端进行验证 不想接入第三方SDK 所以自己手写了一个 主要是配合element plus 实现UI大致框架 背景图片和拼图都是通过后端
  • Vue3、setup的使用

    Vue3 setup ref reactive toRef toRefs 1 setup的使用 1 1 简介 1 2 setup注意点 1 3 定义响应式数据 1 4 toRefs 1 5 setup中执行方法 1 5 1 方式一 1 5
  • 微信小程序反编译微信小程序

    微信小程序反编译跳一跳 项目地址 https github com shunyue1320 decompile wx 反编译 wxapkg 文件 微信开发者工具打开
  • vue.js -- 条件渲染

    目录 条件渲染 v if的用法 v if v else的用法 v if v else if v else的用法 v show的用法 v if 和 v show 的区别 条件渲染 v if的用法 代码演示
  • Vue2转Vue3快速上手第一篇(共两篇)

    Vue3 v2 v3的学习成本不高 只要有v2基础 基本可以上手vue3 一 setup语法 setup中不能访问v2的配置比如data methods等 二 ref响应数据 使用ref可以创建一个对象 可以是基本类型 也可以是对象 例如
  • Vite 和 Webpack 的区别

    Vite 和 Webpack 都是前端打包工具 它们的作用类似 但实现方式和使用方法有所不同 以下是它们之间的一些区别 构建速度 Vite 的构建速度比 Webpack 更快 因为 Vite 在开发环境下使用了浏览器原生的 ES 模块加载
  • 07Vue3-Vuex中计算数学getters应用

    getters Home vue
  • vue3学习笔记(1)script引入vue3实现简单应用

    Vue3专栏入口 目录 一 脚本引入简单使用 二 双向绑定的基本表现 一 脚本引入简单使用 script引入 简单使用实现数据渲染 div h1 counter num h1 div
  • vue项目中批量删除如何实现的

    简单回答 与单个删除的接口为同一个 然后通过数组对象的id来删除
  • 公司后台管理系统搭建(Vue3+Vite+Element Plus+TypeScript+Pinia)

    前言 此次项目搭建选用 Vue3 Vite 并使用 pnpm 管理依赖包 本文将从下载到项目创建记录项目全过程 一 项目搭建 1 使用 npm 下载 pnpm 使用 pnpm 依赖包将被存放在一个统一的位置 因此可以节省大量的硬盘空间以及提
  • Vue3+Echarts:堆积柱状图的绘制

    一 需求 在Vue3项目中 想用Echarts来绘制堆积柱状图 去展示最近一周APP在不同渠道的登录人数 效果如下 二 实现 关于Echarts的下载安装以及图表的样式设计 此处不展开 1 Templates部分

随机推荐

  • 一个人录制课程--全网独一

    获取方式 见文末 共计八章节 1 php编程 2 web安全基础 3 中间人攻击与抓包 4 正反向代理与端口转发5 提权 6 内网 7 实战8工具 1 PHP编程 1 讲师介绍 http协议 挖掘BUG mp4 2 搭建apache php
  • 贝叶斯网络的python实现:Monty Hall问题的求解

    前两节分别介绍了贝叶斯图模型的必要性以及贝叶斯网络的基本原理 本节将通过一个简单的问题介绍贝叶斯网络的python实现 三门问题 Monty Hall problem 亦称为蒙提霍尔问题 蒙特霍问题或蒙提霍尔悖论 是电视节目中一个简单的游戏
  • Spring Bean的三种注入方式

    Spring Bean的三种注入方式 setter 方法 属性 注入 构造方法注入 注解注入 Resource和 Autowired 自动装配 Autowired 和 Resource Autowired Spring提供的注解 byTyp
  • SQL语言---视图操作

    文章目录 前言 一 视图 1 什么是视图 2 建立视图 3 删除视图 二 定义视图 1 建立视图 1 语法格式 2 举例讲解 例子1 建立房间视图 例子2 基于多表建立视图 例子3 基于视图建立视图 例子4 基于表达式的视图 2 删除视图
  • SpringBoot实现前端传入数值Controller层接收为枚举

    定义枚举 import com fasterxml jackson annotation JsonCreator import com fasterxml jackson annotation JsonFormat import lombo
  • ​第一本 Compose 图书上市,联想大咖教你学会 Android 全新 UI 编程

    朱江 现任联想 北京 有限公司 Android 开发工程师 从事 Android 开发工作多年 有丰富的项目经验 负责和参与开发过多款移动应用程序 同时还是多个开源项目的作者 2017 年开始在 CSDN 发表 Android 技术相关博文
  • VLAN技术原理和配置方法

    一 VLAN产生的背景 虚拟局域网 VLAN 是英文Virtual Local Area Network的缩写 随着网络规模不断扩大 网络中的广播报文也随之增加 结果就是使交换机的负担不停的加重 并且一些终端设备也会收到不希望收到的报文 V
  • 12306验证码分割

    首先要从12306上面将验证码爬取下来 保存到C images 下 from PIL import Image import os def get sub img im x y 截出方格图片 assert 0 lt x lt 3 asser
  • HTML+CSS3 5个炫酷的loading

    为了方便大家方便CV 每个loading对应一个html文件 文件下载压缩包 下载地址 https download csdn net download m0 48850204 20432352 spm 1001 2014 3001 550
  • 解决Glide加载图片闪烁的问题(感觉加载了两遍 !!!)

    今天由于项目需求的原因 需要把原来的ViewPager的长方形图片转成圆角图片 一直觉得Glide很强大 应该可以直接设置圆角图片 但是输入 之后并没有找到这个方法 顿时一大片问号飘过 下面来说说遇到的问题 1 之前Glide 3 0 都是
  • 层次聚类在MATLAB中实现

    层次聚类在MATLAB中实现 By Yang Liu 1 第一种方法 1 输入要聚类的数据 2 计算各个样本之间的欧氏距离 3 把距离化成矩阵 矩阵中的元素 X i j X ij Xij 表示第i个样本和第j个样
  • python深度学习之用lightgbm算法实现鸢尾花种类的分类任务实战源码

    本代码以sklearn包中自带的鸢尾花数据集为例 用lightgbm算法实现鸢尾花种类的分类任务 参考来源 https lightgbm readthedocs io en latest Python Intro html usr bin
  • 用户偏好分析

    1 量化用户偏好 首先将用户分类 设定用户对于产品 喜爱 的标准 比如一天浏览产品5次 计算不同分类用户 喜爱 不同产品的人数 例如 分类 A类用户 B类用户 产品1 10 40 产品2 40 10 用户偏好指某类用户更偏好某产品 例如表中
  • 机器学习实战笔记-01概览

    机器学习的主要挑战 1 数据问题 数据量不足 训练数据不具有代表性 需要可泛化的案例 注意采样偏差 数据质量差 错误 异常 缺失 形成了噪音 无关特征 特征工程 选取 提取 创建特征 2 算法问题 过拟合 噪音 模型过于复杂参数过多 欠拟合
  • 2023华为笔试机考题库【等和子数组的最小和/动态规划】

    题目描述 给定一个数组nums 将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 组内元素和的最小值 输入描述 第一行输入 m 接着输入m个数 表示此数组 数据范围 1 lt M lt 50 1 lt nums i lt 50
  • 2023-02-21 好用的一款十六进制编辑器软件Hex Editor Neo ,以十六进制字节形式查看文件有字节

    一 Hex Editor Neo是一款十六进制编辑器软件 可以在几秒钟内处理大文件的操作 能够帮助用户编辑ASCII 十六进制 十进制 float double和二进制数据的应用程序 感觉比notepad的hex查看功能更强大 用notep
  • 音视频开发开发核心知识+新手入门必看基础知识

    音视频开发是一个广泛的领域 它涉及到多个技术领域 包括音频编解码 视频编解码 媒体容器格式 流媒体传输 音视频处理等 以下是音视频开发的一些基础知识 音频编解码器 音频编解码器是将数字音频信号编码成一种压缩格式 并且能够解码压缩的音频数据以
  • android华为手机开启蓝牙耳机,华为手机如何连接蓝牙耳机? 华为手机连接蓝牙耳机方法教程介绍!...

    我们现在在用手机的时候经常会用到耳机 听歌接电话看视频都离不开耳机 但是有的时候如果觉得耳机插来插去很麻烦就可以尝试用蓝牙耳机 那么知道华为手机怎么连接蓝牙耳机吗 具体的连接方法是怎么样的呢 下面小编就给大家简单介绍一下具体的连接方法吧 连
  • 大数据面试之SQL面试题

    一 提要 作为一名数据工作人员 SQL是日常工作中最常用的数据提取 简单预处理语言 因为其使用的广泛性和易学程度也被其他岗位比如产品经理 研发广泛学习使用 本篇文章主要结合经典面试题 给出通过数据开发面试的SQL方法与实战 二 解题思路 简
  • vue3 通过自定义指令在table中滚动加载数据

    1 在utils文件中新建一个loadMore ts文件 import type Directive App from vue const debounce function func any delay any let timer any