【Vue自定义指令详细介绍】

Vue自定义指令详细介绍

  • 1. 自定义指令
    • 1.1 局部
    • 1.2 全局

1. 自定义指令

在 Vue.js 中,除了默认提供的核心指令(如 v-modelv-showv-if 等),Vue.js 也允许注册自定义指令,自定义指令给你提供了一种方法来扩展 Vue 的功能,允许你直接在 DOM 元素上应用更底层的操作。

Vue除支持内置的v-model/v-show等指令,还允许自定义指令, vue2中,代码的复用和抽象的主要形式是组件,但在有些情况下仍然需要对普通dom元素做底层操作,这种情况下需要自定义指令,根据自定义指令的作用范围,可分为:全局、局部两种

自定义指令藏匿于 Vue 实例/组件实例的 directives 选项下,一个指令定义对象可以提供如下几个钩子函数(均为可选):

名称作用
bind只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置
inserted被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)
update所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)
componentUpdated指令所在组件的 VNode 及其子 VNode 全部更新后调用
unbind只调用一次,指令与元素解绑时调用

指令钩子函数会被传入以下参数:

  • el:指令所绑定的元素,可以用来直接操作 DOM。
  • binding:一个对象,包含以下属性:
    • name:指令名,不包括 v- 前缀。
    • value:指令的绑定值,例如:v-my-directive="1 + 1"value 的值是 2
    • oldValue:指令绑定的前一个值,仅在 updatecomponentUpdated 钩子中可用。无论值是否改变都可用。
    • expression:绑定值的字符串形式。例如 v-my-directive="1 + 1" 中,expression 的值是 "1 + 1"
    • arg:传给指令的参数。例如 v-my-directive:foo 中,arg 的值是 "foo"
    • modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar,修饰符对象的值将为 { foo: true, bar: true }
  • vnode:Vue 编译生成的虚拟节点。
  • oldVnode:上一个虚拟节点,仅在 updatecomponentUpdated 钩子中可用。

下面是一个自定义指令的基本例子,我们创建一个指令 v-focus,该指令的作用是页面加载完毕后,元素将自动聚焦:

// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {// 当绑定元素插入到 DOM 中。inserted: function (el) {// 聚焦元素el.focus();}
});// 在组件中局部注册
new Vue({el: '#app',directives: {focus: {// 指令的定义inserted: function (el) {el.focus();}}}
})

使用方式如下:

<input v-focus>

自定义指令可以非常灵活地操作 DOM,赋予你高度的自由度来实现复杂的操作和行为,在实际应用时,它们通常用于操作元素的聚焦(focus)、触摸(touch)、动画(animation)等行为。

1.1 局部

通过自定义标签设置文字颜色

<div id="app"><!--red绑定到data里面的变量--><p v-color="red">我是自定义指令</p> 
</div>
var vm = new Vue({el: '#app',data: {red:'red'},//自定义指令,局部directives:{color: {inserted: function(el,binding) {console.log(el,binding);el.style.color = binding.value;}}}
});

1.2 全局

<div id="app"><!--red绑定到data里面的变量--><p v-color="red">我是自定义指令</p> 
</div>
//自定义标签,全局
Vue.directive('color', {inserted: function(el,binding) {console.log(el,binding);el.style.color = binding.value;}
})var vm = new Vue({el: '#app',data: {red:'red'}
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/626320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【23种设计模式应用场景汇总】

23种设计模式应用场景汇总 设计模式是一种在软件开发中解决特定问题的通用解决方案。下面我将尝试将23种设计模式融入到一个场景中&#xff1a; 假设我们正在开发一个在线购物系统&#xff0c;我们可以使用以下设计模式&#xff1a; 1. 工厂方法模式&#xff1a;当用户在网站上…

力扣hot100 只出现一次的数字 位运算

Problem: 136. 只出现一次的数字 文章目录 思路复杂度Code 思路 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public int singleNumber(int[] nums) {int res 0;for(int x : nums)res ^ x;return res;} }

UI自动化测试框架

文章目录 UI自动化基础什么是UI自动化测试框架UI自动化测试框架的模式数据驱动测试框架关键字驱动测试框架行为驱动测试框架 UI自动化测试框架的作用UI自动化测试框架的核心思想UI自动化测试框架的步骤UI自动化测试框架的构成UtilsLog.javaReadProperties.Java coreBaseTest.ja…

【分布式技术】监控技术zabbix实操

目录 一、脚本监控nginx的连接状态 步骤一&#xff1a;做好nginx的配置 步骤二&#xff1a;完成监控数据脚本编写&#xff0c;并使用zabbix_get测试 步骤三&#xff1a;在zabbix agent配置目录中&#xff0c;编写以conf结尾的用户参数文件 步骤四&#xff1a;在zabbix web…

Python 网络编程之TCP详细讲解

【一】传输层 【1】概念 传输层是OSI五层模型中的第四层&#xff0c;负责在网络中的两个端系统之间提供数据传输服务主要协议包括**TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;** 【2】功能 **端到端通信&#xff1a;**传输层负责…

HackerGPTWhiteRabbitNeo的使用及体验对比

1. 简介 WhiteRabbitNeo&#xff08;https://www.whiterabbitneo.com/&#xff09;是基于Meta的LLaMA 2模型进行特化的网络安全AI模型。通过专门的数据训练&#xff0c;它在理解和生成网络安全相关内容方面具有深入的专业能力&#xff0c;可广泛应用于教育、专业培训和安全研究…

MongoDB系统性能调优(持续更新)

cache_size 指定WT存储引擎内部cache的内存用量上限。 需要注意的是&#xff0c;仅作用于WiredTiger cache&#xff0c;而非mongod进程的内存用量上限。MongoDB同时使用WT cache和文件系统cache&#xff0c;往往mongod进程的内存用量高于该值。cache_size相对于物理内存总量不要…

聊聊PowerJob的TransportServiceAware

序 本文主要研究一下PowerJob的TransportServiceAware TransportServiceAware tech/powerjob/server/remote/aware/TransportServiceAware.java public interface TransportServiceAware extends PowerJobAware {void setTransportService(TransportService transportServi…

什么是非电离辐射与电离辐射?

摘要: 非电离辐射和电离辐射是两种不同类型的辐射&#xff0c;它们主要区别在于能量水平和与物质相互作用的方式。 非电离辐射 非电离辐射是指能量较低&#xff0c;不足以使原子或分子的电子脱离其原子核束缚而产生电离现象的电磁波。这类辐射不 ... 非电离辐射和电离辐射是两…

多角度俯瞰Python函数及作用

什么是函数 我们应该都学过三角函数吧&#xff0c;比如正弦函数&#xff0c;在最初接触到这方面的知识的时候&#xff0c;我们要求sin30是不是要去查一个叫做“三角函数值查表”的东西&#xff0c;然后得出sin30 0.5。 那么问题来了&#xff0c;sin30为什么会等于0.5呢&…

嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第四天-C++动态联编和虚函数(物联技术666)

链接:https://pan.baidu.com/s/1QO44mZtlgbiStTuI6sQP4g?pwd=1688 提取码:1688 上午:动态联编和虚函数 下午:QT介绍 教学内容: 1、动态联编和虚函数: 编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序运行时才能确定将要调用的函数,这要求联编工作要…

国内环境 GitHub 拉取仓库速度慢的缓解方案

第一步&#xff1a; 浏览器打开如下两个网址&#xff0c;找到对应 IP 地址&#xff1a; GitHub.com - GitHub: Lets build from here GitHubgithub.global.ssl.fastly.net 假设对应 IP 地址分别为 140.82.xx.xxx 和 199.232.yy.yyy 第二步&#xff1a; 编辑 hosts 文件 sud…

openssl3.2 - 官方demo学习 - kdf - scrypt.c

文章目录 openssl3.2 - 官方demo学习 - kdf - scrypt.c概述笔记END openssl3.2 - 官方demo学习 - kdf - scrypt.c 概述 设置 kdf-SCRYPT算法的参数, 取key 笔记 /*! \file scrypt.c \note openssl3.2 - 官方demo学习 - kdf - scrypt.c 设置 kdf-SCRYPT算法的参数, 取key */…

Centos 更换内核

文章目录 一、查看/更换系统内核1.1 查看当前运行环境的内核1.2 查看系统上所有可用内核1.3 切换内核方法一&#xff1a;通过启动菜单更换内核方法二&#xff1a;更换默认启动内核 二、安装内核2.1 使用ELRepo安装2.2 安装指定内核版本参考资料 一、查看/更换系统内核 1.1 查看…

docker搭建SSH镜像、systemctl镜像、nginx镜像、tomcat镜像

目录 一、SSH镜像 二、systemctl镜像 三、nginx镜像 四、tomcat镜像 五、mysql镜像 一、SSH镜像 1、开启ip转发功能 vim /etc/sysctl.conf net.ipv4.ip_forward 1sysctl -psystemctl restart docker 2、 cd /opt/sshd/vim Dockerfile 3、生成镜像 4、启动容器并修改ro…

面试题:你知道 Spring lazy-init 懒加载的原理吗?

文章目录 前言一、先睹为快二、原理分析三、总结 前言 普通的bean的初始化是在容器启动初始化阶段执行的&#xff0c;而被lazy-init修饰的bean 则是在从容器里第一次进行context.getBean(“”)时进行触发。 Spring 启动的时候会把所有bean信息(包括XML和注解)解析转化成Spring…

这可能是最全面的Java并发编程八股文了

内容摘自我的学习网站&#xff1a;topjavaer.cn 分享50道Java并发高频面试题。 线程池 线程池&#xff1a;一个管理线程的池子。 为什么平时都是使用线程池创建线程&#xff0c;直接new一个线程不好吗&#xff1f; 嗯&#xff0c;手动创建线程有两个缺点 不受控风险频繁创…

SpringBoot基础:一步步创建SpringBoot工程

摘要 本文介绍了&#xff0c;从零开始创建SpringBoot工程&#xff0c;且在每一步给出分析和原因。创建maven – 转Springboot – 引入jdbc – 引入数据库操作框架&#xff0c;最后给出了不同场景指定不同配置文件的方案。 背景 为什么要使用SpringBoot工程&#xff1f; 使用Sp…

Python 网络编程之粘包问题

【一】粘包问题介绍 【1】粘包和半包 粘包&#xff1a; 定义&#xff1a; 粘包指的是发送方发送的若干个小数据包被接收方一次性接收&#xff0c;形成一个大的数据包。原因&#xff1a; 通常是因为网络底层对数据传输的优化&#xff0c;将多个小数据包组合成一个大的数据块一次…

Linux搭建和使用redis

官网地址&#xff1a;http://redis.io/download 文件上传到服务器 tar包解压 tar zxvf redis-5.0.14.tar.gz安装 进入解压目录下&#xff0c;找到Makefile所在目录&#xff0c;执行make命令 make执行之后&#xff0c;会产生src等目录&#xff0c;进入执行make install命令…