返回顶部
首页 > 资讯 > 精选 >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://lsjlt.com/news/330461.html(转载时请注明来源链接)

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

猜你喜欢
  • vue全局注册自定义指令防抖怎么实现
    本文小编为大家详细介绍“vue全局注册自定义指令防抖怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue全局注册自定义指令防抖怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。全局注册自定义指令防抖...
    99+
    2023-06-30
  • vue全局注册自定义指令防抖解析
    目录全局注册自定义指令防抖1、先建一个js文件2、在mian.js里面注册3、使用vue防抖的使用防抖函数在vue中直接使用vue中使用高阶组件vue中自定义指令使用全局注册自定义指...
    99+
    2024-04-02
  • vue3中怎么自定义指令实现按钮防抖
    这篇“vue3中怎么自定义指令实现按钮防抖”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue3中怎么自定义指令实现按钮防抖...
    99+
    2023-07-05
  • vue全局自定义指令和局部自定义指令的使用
    目录局部自定义指令(只针对组件内的元素)定义全局自定义指令自定义指令的钩子函数自定义指令钩子函数的参数例子除了默认设置的核心指令 (v-model 和 v-show),Vue 也允许...
    99+
    2024-04-02
  • vue2如何实现directive自定义指令的封装与全局注册
    本文小编为大家详细介绍“vue2如何实现directive自定义指令的封装与全局注册”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue2如何实现directive自定义指令的封装与全局注册”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-07-05
  • vue2实现directive自定义指令的封装与全局注册流程
    目录前言一、directive自定义指令介绍二、全局注册使用流程1.准备好我们需要的自定义指令2.开始在main中导入该文件完成注册功能3.完成了注册功能开始使用总结前言 我们在使用...
    99+
    2023-02-27
    vue2 directive自定义指令 vue2 全局注册 vue注册全局指令
  • Vue全局自定义指令Modal拖拽的实践
    目录背景 实现思路 实现效果 背景 最近一直在做的项目是Vue2搭建的项目,UI框架用的antdV,项目中用到了很多Modal对话框,然后突然有一天产品说:“这个对话框为什么不能移...
    99+
    2024-04-02
  • vue3自定义指令实现按钮防抖示例详解
    目录写在前面自定义指令实现按钮防抖实现思路代码实现总结写在前面 在实际项目开发过程中,对于按钮的提交事件来说,我们需要限制按钮重复点击,避免在某个时间内重复提交。这时候我们一般用到...
    99+
    2023-02-27
    vue3自定义指令按钮防抖 vue 按钮防抖
  • vue2 对全局自定义指令一次性进行注册的方法
    在src下新建文件夹directive/index.js index.js文件中用来写入注册方法 const requireDirective = require.context(...
    99+
    2024-04-02
  • Vue中的自定义指令怎么实现
    今天小编给大家分享一下Vue中的自定义指令怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。试炼:实现v-mymodel...
    99+
    2023-07-04
  • 怎么完全掌握Vue自定义指令
    这篇文章主要介绍“怎么完全掌握Vue自定义指令”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么完全掌握Vue自定义指令”文章能帮助大家解决问题。准备:自定义指令介绍除了核心功能默认内置的指令 (v...
    99+
    2023-07-05
  • vue怎么实现自定义全局右键菜单
    本篇内容介绍了“vue怎么实现自定义全局右键菜单”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果如图所示:注意:需要在项目中找到页面整体布...
    99+
    2023-06-29
  • Vue自定义指令怎么写
    小编给大家分享一下Vue自定义指令怎么写,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是Vue指令指令是一种可以附加到DOM...
    99+
    2024-04-02
  • Vue自定义指令如何实现checkbox全选功能
    这篇文章主要介绍Vue自定义指令如何实现checkbox全选功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码:<!DOCTYPE html> <ht...
    99+
    2024-04-02
  • vue实现自定义全局右键菜单
    前段时间公司在做一个webIDE项目,其中有对文件树的各种操作,主要通过右键菜单实现,今天就来记录一下怎么在vue项目中实现全局的自定义右键菜单。效果如图所示: 注意: 需要在项目...
    99+
    2024-04-02
  • vue中怎么自定义全局组件
    这期内容当中小编将会给大家带来有关vue中怎么自定义全局组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Vue.use( plugin ):安装 Vue.js 插件。如...
    99+
    2024-04-02
  • vue中自定义指令怎么用
    小编给大家分享一下vue中自定义指令怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、v-drag需求:鼠标拖动元素思路:元素偏移量 = 鼠标滑动后的坐标 - 鼠标初始点击元素时的坐标 + 初始点击时元素距离可视区域...
    99+
    2023-06-22
  • Vue自定义指令深入探讨实现
    目录指令自定义指令关于注册自定义指令全局注册局部注册自定义指令的钩子函数封装自定义指令指令 想要了解自定义指令,那肯定得先明白什么是指令。 指令的本质:语法糖,标志位。在编译阶段 r...
    99+
    2023-05-19
    Vue自定义指令 Vue自定义指令实现
  • Vue怎么自定义指令directive使用
    本篇内容主要讲解“Vue怎么自定义指令directive使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue怎么自定义指令directive使用”吧!1. 一个指令定义对象可以提供如下几个钩...
    99+
    2023-07-06
  • vue自定义全局组件实现弹框案例
    本文实例为大家分享了vue自定义全局组件实现弹框案例的具体代码,供大家参考,具体内容如下 说明:本案例是封装的一个弹框页面,因为只想要一个遮罩,内容自定义。因为ElementUI上已...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作