广告
返回顶部
首页 > 资讯 > 精选 >vue全局注册自定义指令防抖怎么实现
  • 552
分享到

vue全局注册自定义指令防抖怎么实现

2023-06-30 17:06:18 552人浏览 八月长安
摘要

本文小编为大家详细介绍“Vue全局注册自定义指令防抖怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue全局注册自定义指令防抖怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。全局注册自定义指令防抖

本文小编为大家详细介绍“Vue全局注册自定义指令防抖怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue全局注册自定义指令防抖怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

全局注册自定义指令防抖

1、先建一个js文件

建一个debounce.js文件,放在src/directives文件夹里面

export default (vue) => {     vue.directive('debounce', { //防抖函数指令      inserted: function(el, binding) {        let timer;        el.addEventListener("click", () => {          if (timer) {            clearTimeout(timer);          }          timer = setTimeout(() => {          //关键点:vue 的自定义指令传递的参数binding 如果是一个函数,则通过      binding.value()来执行,通过上述示例,还可以传递比如事件, 绑定对象之类的            binding.value();          }, 1000);        });      }   })}

2、在mian.js里面注册

import Debounce from './directives/debounce.js' //防抖自定义指令Debounce(Vue)

3、使用

在组件中button按钮添加该指令即可实现防抖

v-debounce="getTableData"

vue防抖的使用

防抖函数

function debounce(fn, immediate = true) {  let timer;  return function () {    if (timer) clearTimeout(timer);    if (immediate) {      let bool = !timer;      timer = setTimeout(() => (timer = 0), 300);      return bool && fn.apply(this, [...arguments]);    }    timer = setTimeout(() => fn.apply(this, [...arguments]), 300);  };}export default {  debounce,};

在vue中直接使用

import utils from "./utils/index";methods:{    // 手动添加debounce    btnHandler1: utils["debounce"](function (...rest) {      console.log("2222 ", this, rest);    }),}

vue中使用高阶组件

使用抽象组件对于传入按钮进行改造,对于按钮进行事件的重写,加入防抖功能;

import Vue from 'vue'// ctx 【context 上下文 绑定this指向】const debounce = (func, time, ctx, immediate = true) => {  let timeout  return function (...params) {    if (timeout) clearTimeout(timeout)    if (immediate) {      var callNow = !timeout      timeout = setTimeout(() => {        timeout = null      }, time)      if (callNow) func.apply(ctx, params)    } else {      timeout = setTimeout(function () {        func.apply(ctx, params)      }, time)    }  }}// 只能绑定一个组件,多个组件无法绑定Vue.component('Debounce', {  abstract: true,//抽象组件,无状态,  props: ['time', 'events', 'immediate'],  created () {    this.evenTKEys = this.events && this.events.split(',')    this.originMap = {}    this.debouncedMap = {}  },  render () {    // 组件使用proxy对象包装,可以了解 【this】;    // 取出虚拟节点,默认第一个,也就是高阶组件中若传递了多个子组件,只展示第一个    const vnode = this.$slots.default[0]    // 如果默认没有传 events,则对所有绑定事件加上防抖    if (!this.eventKeys) {      this.eventKeys = Object.keys(vnode.data.on)    }    this.eventKeys.forEach((key) => {      const target = vnode.data.on[key]      if (target === this.originMap[key] && this.debouncedMap[key]) {        vnode.data.on[key] = this.debouncedMap[key]      } else if (target) {        this.originMap[key] = target        this.debouncedMap[key] = debounce(target, this.time, vnode, this.immediate)        vnode.data.on[key] = this.debouncedMap[key]      }    })    return vnode  }})
    <Debounce events="click" time="300">      <button @click="clickHandler(1,2,3)" :btnval="'val'">click1</button>    </Debounce>

vue中自定义指令使用

// 指令【防抖】Vue.directive("debounce", {  // 只调用一次,第一次绑定元素时调用  // el【绑定的元素】,binding【一个相关对象】,vnode【vue编译生成的虚拟节点】  // beforemount之后,mounted之前;  // init events&lifecycle 【初始化事件和生命周期】  bind(el, binding, vnode, oldVnode) {    console.log(el, binding, vnode, oldVnode);    let { value } = binding;    let [target, time] = value;    const debounced = debounce(target, time, vnode);    el.addEventListener("click", debounced);  },  // 被绑定元素插入父节点时调用(仅保证父节点存在,但是不一定插入文档)  inserted() {},  // 所在组件的vnode更新时调用  update() {},  componentUpdated() {},  unbind(el) {    console.log(el, "el");    el.removeEventListener("click", el._debounced);  },});
使用 <button      v-debounce="[        () => {          btnHandler();        },        300,      ]"    >      点击    </button>     <button v-if="testcom" v-debounce="[btnHandler, 300]">点击</button>

读到这里,这篇“vue全局注册自定义指令防抖怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: vue全局注册自定义指令防抖怎么实现

本文链接: https://www.lsjlt.com/news/330461.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue全局注册自定义指令防抖怎么实现
    本文小编为大家详细介绍“vue全局注册自定义指令防抖怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue全局注册自定义指令防抖怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。全局注册自定义指令防抖...
    99+
    2023-06-30
  • vue全局注册自定义指令防抖解析
    目录全局注册自定义指令防抖1、先建一个js文件2、在mian.js里面注册3、使用vue防抖的使用防抖函数在vue中直接使用vue中使用高阶组件vue中自定义指令使用全局注册自定义指...
    99+
    2022-11-13
  • vue3中怎么自定义指令实现按钮防抖
    这篇“vue3中怎么自定义指令实现按钮防抖”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue3中怎么自定义指令实现按钮防抖...
    99+
    2023-07-05
  • vue2实现directive自定义指令的封装与全局注册流程
    目录前言一、directive自定义指令介绍二、全局注册使用流程1.准备好我们需要的自定义指令2.开始在main中导入该文件完成注册功能3.完成了注册功能开始使用总结前言 我们在使用...
    99+
    2023-02-27
    vue2 directive自定义指令 vue2 全局注册 vue注册全局指令
  • vue2如何实现directive自定义指令的封装与全局注册
    本文小编为大家详细介绍“vue2如何实现directive自定义指令的封装与全局注册”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue2如何实现directive自定义指令的封装与全局注册”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-07-05
  • vue3自定义指令实现按钮防抖示例详解
    目录写在前面自定义指令实现按钮防抖实现思路代码实现总结写在前面 在实际项目开发过程中,对于按钮的提交事件来说,我们需要限制按钮重复点击,避免在某个时间内重复提交。这时候我们一般用到...
    99+
    2023-02-27
    vue3自定义指令按钮防抖 vue 按钮防抖
  • Vue全局自定义指令Modal拖拽的实践
    目录背景 实现思路 实现效果 背景 最近一直在做的项目是Vue2搭建的项目,UI框架用的antdV,项目中用到了很多Modal对话框,然后突然有一天产品说:“这个对话框为什么不能移...
    99+
    2022-11-12
  • vue2 对全局自定义指令一次性进行注册的方法
    在src下新建文件夹directive/index.js index.js文件中用来写入注册方法 const requireDirective = require.context(...
    99+
    2022-11-13
  • Vue中的自定义指令怎么实现
    今天小编给大家分享一下Vue中的自定义指令怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。试炼:实现v-mymodel...
    99+
    2023-07-04
  • 怎么完全掌握Vue自定义指令
    这篇文章主要介绍“怎么完全掌握Vue自定义指令”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么完全掌握Vue自定义指令”文章能帮助大家解决问题。准备:自定义指令介绍除了核心功能默认内置的指令 (v...
    99+
    2023-07-05
  • vue怎么实现自定义全局右键菜单
    本篇内容介绍了“vue怎么实现自定义全局右键菜单”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果如图所示:注意:需要在项目中找到页面整体布...
    99+
    2023-06-29
  • Vue自定义指令如何实现checkbox全选功能
    这篇文章主要介绍Vue自定义指令如何实现checkbox全选功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码:<!DOCTYPE html> <ht...
    99+
    2022-10-19
  • 怎么在Vue3中实现自定义指令
    这篇文章主要介绍“怎么在Vue3中实现自定义指令”,在日常操作中,相信很多人在怎么在Vue3中实现自定义指令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在Vue3中实现自定义指令”的疑惑有所帮助!接下来...
    99+
    2023-07-02
  • vue3全局组件自动注册功能怎么实现
    本篇内容主要讲解“vue3全局组件自动注册功能怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3全局组件自动注册功能怎么实现”吧!vue3全局组件自动注册建文件需要在src/comp...
    99+
    2023-07-06
  • 怎么进行Vue自定义复制指令v-copy功能的实现
    这篇文章给大家介绍怎么进行Vue自定义复制指令v-copy功能的实现,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用自定义指令创建一个点击复制文本功能 创建v-copy.js文件import Vue&nbs...
    99+
    2023-06-26
  • AngularJS怎么自定义指令实现面包屑功能
    这篇文章主要介绍了AngularJS怎么自定义指令实现面包屑功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:<!DOCTY...
    99+
    2022-10-19
  • vue怎么使用自定义指令实现按钮权限展示功能
    今天小编给大家分享一下vue怎么使用自定义指令实现按钮权限展示功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、在src...
    99+
    2023-06-30
  • vuedirective全局自定义指令实现按钮级别权限控制的操作方法
    目录概念全局自定义指令局部自定义指令钩子函数全局自定义指令项目应用在日常项目中,通常会需要根据后台接口返回的数据,来判断当前用户的按钮操作权限。对于当前登录用户来说,只有在当前按钮有...
    99+
    2023-02-06
    vue directive按钮级别权限控制 vue directive全局自定义指令
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作