Vue自定义指令

详解在Vue中通过自定义指令获取dom元素 vue.js 是数据绑定的框架,大部分情况下我们都不需要直接操作 DOM Element,但在某些时候,我们还是有获取DOM Element的需求的;  在 vue.js 中,获取某个DOM Element常用的方法是将这个元素改成一个组件 (component),然后通过 this.$el 去获取,但是在一些很小的项目里,在一些没有使用 webpack 等构建工具的项目中,创建一个组件并不是那么值得,所以 vue 提供了另一种操作DOM元素的方式,就是自定义指令 (directive) ;  自定义指令功能在DOM Element的生命周期内提供了不同的钩子函数,并允许我们监听指令绑定的 立即下载
  • 为什么用?

    vue本身已经有很多内置指令,如v-model、v-html、v-if、v-else、v-for等,这些指令使用起来非常方便,但是有些时候内置指令不能完全要求,需要自定指令,通常用于局部修改DOM,例如:页面加载时,某个输入框获得焦点(autofocus工作的情况下)。

    // 注册一个全局自定义指令 `v-focus`
    Vue.directive('focus', {
      // 当被绑定的元素插入到 DOM 中时……
      inserted: function (el) {
        // 聚焦元素
        el.focus()
      }
    })
    
    //局部注册,组件中添加以下代码
    directives: {
      focus: {
        // 指令的定义
        inserted: function (el) {
          el.focus()
        }
      }
    }
    
    //使用
    <input v-focus>
    
  • 怎么用?

    • 全局定义

      Vue.directive('directiveName', {
          //仅调用一次,指令第一次绑定到元素时调用,在这里添加一次性的初始化设置
          bind:function(el,binding,vnode,oldVnode){
              //el 指令所绑定的元素,可以用来操作DOM,例如el.focus()
              //el.focus()
          },
          //被绑定元素插入父节点时调用(仅保证父节点存在,但不一定已被插入文档中)
          inserted:function(el,binding,vnode,oldVnode){
              //binding 一个对象包含以下属性
              //name  指令名
              //value  指令绑定的值
              //oldValue  指令绑定的前一个值
              //expression 字符串形式的指令表达式
              //arg  传给指令的参数
              //modifiers  一个包含修饰符的对象
          },
          //所有组件的VNode更新时调用,但是可能发生在其子VNode更新之前,指令的值可能发生了改变,也可能没有,可通过比较更新前后值(value、oldValue )忽略不必要的模板更新
          update:function(el,binding,vnode,oldVnode){
              //vnode  Vue编译生成的虚拟节点
              //oldVnode  上一个虚拟节点
          },
          //指令所在组件的VNode及其子VNode全部更新后调用
          componentUpdated:function(el,binding,vnode,oldVnode){
          },
          //只调用一次,指令与元素解绑时调用
          unbind:function(el,binding,vnode,oldVnode){}
      })
      

      tips:除了el之外,其他参数都应该是只读的,切勿进行修改。如果需要在钩子之间共享数据,建议通过元素的 dataset来进行。

    • 局部定义

      directives: {
        directiveName: {
          bind: function (el,binding,vnode,oldVnode) {},
          inserted: function (el,binding,vnode,oldVnode) {},
          update: function (el,binding,vnode,oldVnode) {},
          componentUpdated: function (el,binding,vnode,oldVnode) {},
          unbind: function (el,binding,vnode,oldVnode) {}
        }
      }
      
    • 动态指令参数

      //指定动态指令参数
      <p v-test:[argument]="value"></p>
      
      //获取动态指令参数
      Vue.directive('test', {
        bind: function (el, binding, vnode) {
          console.log(binding.arg);
        }
      })
      
    • 对象字面量形式传多个值到指令

      //传入多个值到指令
      <div v-test="{ color: 'white', text: 'hello!' }"></div>
      
      //获取传入的多个值
      Vue.directive('test', function (el, binding) {
        console.log(binding.value.color) // => "white"
        console.log(binding.value.text)  // => "hello!"
      })
      

示例:
自定义全局权限指令

//定义
Vue.directive('permission',() => {
   insert: (el,binding) => {
       //添加禁用控制
       const DISABLED = (binding.arg === 'disabled') 
       const status = binding.modifiers
       if (DISABLED) {
          if (binding.value) {
            //可见状态
            if (status.visible) return el.remove(el)
            //可操作状态
            if (status.editable) el.style.pointerEvents = 'none'
          }
       }
       let result = -1
      //遍历权限列表permissioinList
      result = permissioinList.findIndex(item => item === binding.value)
      if (result == -1) {
        el.remove()
      }
   }
})

//使用
<h1  v-permissioin="xxx">测试<h1>
手把手式介绍 ADNI 影像数据下载 1.搜索 1.1登录 打开ADNI的官网:http://adni.loni.usc.edu/,进入下面的界面。 点击 DATA&SMPLES 下的 ACCESS DATA AND SAMPLES,如下图。 页面跳转以后点击中间的“LOGIN”,这时会跳出一个新的界面,然后在右上角输入自己的帐号、密码即可。如果没有权限可以跳转到第2部分看看如何申请权限。 登录以后选择DOWNLOAD下的 Image Collections就是搜索下载影像数据,其他还有一些学习测试数据和遗传数据。 1.2 sea 阅读详情

相关推荐

电磁流量计模拟前端电路设计与优化

模拟前端电路(AFE)是传感器信号处理的核心环节,通过放大、滤波和模数转换实现信号调理。其设计需重点考虑放大器共模抑制比(CMRR)和ADC分辨率等关键参数,在电磁流量计等工业测量应用中,AD8220仪表放大器与AD7172-2 Σ-Δ型ADC的组合能有效简化传统多级架构。现代过采样技术结合数字滤波可替代模拟滤波器,显著提升系统集成度与测量精度,这种设计方法同样适用于压力传感、生物电信号采集等需要高精度信号调理的场景。

weixin_42602241的博客 616

vue自定义指令及避坑点总结

为了方便平时的开发,有时候我们可能会自定义一些指令。vue自定义指令分为全局自定义和局部自定义指令: 全局注册:在全局注册的时候发现了一个神坑,指令要写在vue实例化对象前面,否则会报错Failed to resolve directive; Vue.directive('name',{}) 局部注册 directive:{ name:'' } 方便平时的开发,我们必须要熟悉自定义指令的钩子函数: 1.bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。 2.inser

weixin_44691220的博客 1513

mot_challenge官方评估代码

mot_challenge官方代码使用介绍 评估mot17验证集:每个视频序列的后一半帧作为验证集 下载源码:git clone https://hub.fastgit.org/JonathonLuiten/TrackEval.git 官网上下载data样例,放在TrackEval/下,结构如下: data |-- gt | |-- bdd100k | |-- davis | |-- kitti | |-- mot_challenge | | |-- MOT15-train |

qq_37866436的博客 4892

vue中的自定义指令

在vue实例中使用该属性申明自定义指令,在directives中申明自定义指令有两种方法,一种就是使用函数的形式(更加简单便捷),另一种就是使用对象的形式(能够定义更加精细);(1)第一个参数为element:实质上为使用该属性的真实DOM;(2)第二个参数为binding:是一个对象,包含value属性值等;(1)指令与元素成功绑定时调用:实质上就是对象形式的bind函数;(2)令所在模板(例:id为root中)发生重新解析时:实质上就是对象形式的update函数; 指令与元素成功绑定时调用指令

weixin_46376652的博客 641

TortoiseGit之配置密钥

基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。

欧文的博客 2077

lisflood-fp(一)从源码到可执行文件:Windows下的Cmake实战编译指南

本文详细介绍了在Windows环境下使用Cmake工具编译lisflood-fp水文模型源码生成可执行文件的全过程。从开发环境配置、源码获取到实战编译,逐步指导如何解决常见错误并处理运行时依赖,最终生成可用的exe文件。特别适合水文专业研究者和工程师学习参考。

weixin_30555125的博客 481

【vue使用自定义指令directives监听元素宽度和高度的变化】

vue使用自定义指令directives监听元素宽度和高度的变化

Min_Fox的博客 2234

从零搭建A股量化交易系统:开源框架选型与实战部署指南

本文详细介绍了从零搭建A股量化交易系统的完整流程,重点分析了开源框架VNPY和QMT的选型与实战部署。内容涵盖系统架构设计、策略开发、性能优化及实盘过渡方案,为开发者提供了一套完整的A股实盘量化交易解决方案,助力高效构建稳定可靠的量化交易系统。

sugar的博客 1271

vue自定义指令

一,概念。 // 注册 Vue.directive('my-directive', { //这里面都是自定义指令的生命周期。 bind: function () {}, //绑定 inserted: function () {}, // 插入 update: function () {}, // 更新 componentUpdated: function () {}, unbind: function () {} }) 二,例子 // 注册一个全局自定义指令 `v-focus`当页面

weixin_43989837的博客 309

群晖NAS下docker安装MySql

本文将一步一步讲解如何在群晖NAS的docker中启用一个MySQL容器 , 算是初学者对问题解决的一个记录.

qq_46375248的博客 5976

C++新手也能搞定!Windows下Cesium-Native编译全流程(附依赖下载技巧)

本文为C++新手详细介绍了在Windows系统下编译Cesium-Native库的全流程。重点针对网络环境不佳的情况,提供了手动下载依赖库的实用技巧,并指导用户使用CMake配置、生成解决方案,最终完成编译与测试验证,帮助开发者成功构建这一处理3D地理空间数据的C++运行时库。

weixin_28839549的博客 380

vue基础面试题

1.简述MVVM和MVC MVC: Model(模型) View(视图) Controller(控制器) 简单的理解:视图请求数据,将请求发送至控制器,控制器再将请求发送给模型,模型去查找数据,找到之后传给控制器,控制器再传给视图进行渲染。 MVP: MVVM Model 代表数据模型 View 代表UI视图 ViewModel 负责监听 Model 中数据的改变并且控制视图的更新(桥梁,可以理解成mvc中的控制器) 简单理解:视图请求数据,将请求发送至控制器,在控制器的两端具有监听机制,直接调用模型的数据

weixin_45569614的博客 991

基于YOLO的智能视频监控异常行为检测研究:从算法原理到落地部署的全栈实践

本文深入探讨如何利用 YOLO(You Only Look Once)系列算法构建一套端到端的异常行为检测系统。文章首先回顾 YOLOv8 在时空建模上的局限,然后提出“YOLO-STA(Spatio-Temporal Aggregation)”轻量级改进框架,在公开数据集 UCF-Crime 上将异常行为检测的 mAP@0.5 从 72.4 提升到 80.1;接着给出完整训练、推理、部署的 Python 代码(PyTorch + TensorRT),并介绍如何仅用 4 GB 显存的 Jetson Xavi

博客 1320

VueJS 之自定义指令

VueJS 允许你注册自定义指令,以便封装对 DOM 元素的重复处理行为,提高代码的复用率。VueJS 中的自定义指令分为两类,即全局自定义指令及私有自定义指令。其中,私有自定义指令仅允许当前组件(定义该指令的组件)使用,而全局自定义指令允许当前项目中的任何组件使用。你可以通过终端directives节点来定义私有自定义指令。

两个月亮 992

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

methods vue过滤器 和_VueJS自定义指令和过滤器用法详解

在上一节中,我们学习了VueJS过渡和动画(transition& animation)的用法,无论是实现过渡还是动画,在VueJS它们的使用都是类似的,你可以根据标准过渡或动画类自定义然后使用。指令是指示VueJS以某种方式进行操作,我们之前已经看到了诸如v-if、v-show、v-else、v-for、v-bind、v-model、v-on等指令。在这一节中,我们将学习自定义指令,创建...

weixin_39786341的博客 170

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Vue的自定义指令

带你了解Vue的自定义指令以及如何局部注册和全局注册自定义指令。

m0_67584973的博客 4451

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

vuejs 指令封装 button 加载效果_这些Vue自定义指令,让你的项目开发爽到爆

受 AngularJS 的启发,Vue 内置了一些非常有用的指令(比如v-html和v-once等),每个指令都有自身的用途。完整的指令列表可以在这里查看.这还没完,更棒的是可以开发自定义指令。Vue.js 社区因此得以通过发布自定义指令npm 包,解决了无数的代码问题。以下就是我最喜欢的 Vue.js 自定义指令列表。不用说,这些指令为我的项目开发节省了大量时间!?1. V-Hot...

weixin_42117340的博客 411

vue自定义指令及常用的自定义指令封装

本文主要是vue2以及vue3自定义指令的定义及使用,包含一些常用自定义指令的写法

greed 1751

Vue:几个实用的 Vue 自定义指令

几个实用的 Vue 自定义指令 复制粘贴指令 v-copy 长按指令 v-longpress 输入框防抖指令 v-debounce 禁止表情及特殊字符 v-emoji 图片懒加载 v-LazyLoad 权限校验指令 v-premission 实现页面水印 v-waterMarker 拖拽指令 v-draggable 代码地址: https://github.com/mouday/Vue-Demo/tree/main/vue-directive 参考 https://cn.vuejs.org/v2/gui

彭世瑜的博客 1548

vue3:自定义指令

在Vue中,诸如v-if、v-for、v-on等等被称之为内置指令,它们都是以v-开头的,我们无需注册即可在全局使用它们,内置指令提供了极大的方便给我们,比如v-for指令可以让我们快速循环出很多dom元素。在指令需要附加在普通的 v-on 事件监听器调用前的事件监听器中时,这很有用。因为vue3可以有多个根节点,当有一个根节点时使用指令没有问题,如果有多个根节点使用指令回报错,建议多个根节点可以在组件内部使用指令。value:传递给指令的值。顾名思义,自己定义自定义指令的方法,实现我们需要的指令功能。

snow的博客 1万+

[Vue]自定义指令

1. 自定义指令 1.1 语法 1.2 自定义指令的参数 2. 自定义指令实现数值放大10倍 2.1 查看自定义指令的参数 2.2 需求的实现 2.3 自定义指令调用的时机 2.3.1 指令与元素成功绑定时(初始化页面) 2.3.2 所在的模板被重新解析时 3. 自定义指令让其所绑定的input元素默认获取焦点 3.1 需求实现 3.2 需求未实现的解释 3.3 对象形式自定义指令 3.4 对象形式自定义指令实现需求 4. 自定义指令注意点 4.1 指令名多个单词之间使用短线符连接 4.2 自定义指令中的t

emmmm..... 3674
上一篇: 前端接收二进制文件流,通过blob对象实现下载
下一篇: vue项目中使用iview组件,禁止自动填充用户名和密码解决方法
codezha
博客等级 码龄10年 28粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值