vue(9):自定义指令

2023-11-15

自定义指令

除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。

示例: 注册一个全局指令 v-focus, 该指令的功能是在页面加载时,元素获得焦点

<div id="app">
	<p>请输入:</p><input v-focus />
</div>

<script>
	// 注册一个全局自定义指令 v-focus
	Vue.directive('focus', {
		// 当绑定元素插入到 DOM 中。
		inserted: function(el) {
			// 聚焦元素
			el.focus()
		}
	})
	//创建一个根实例
	new Vue({
		el: '#app'
	})
</script>

示例: 使用 directives 选项来注册局部指令,这样指令只能在这个实例中使用

<div id="app">
	<p v-wordup>Hello World</p>
</div>

<script>
	new Vue({
		el: '#app',
		directives: {
			//定义局部指令,英文字母大写
			'wordup': {
				bind: function(el) {
					el.innerText = el.innerText.toUpperCase()
				}
			}
		}
	})
</script>

钩子函数

常见钩子函数(可选):

bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新
componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。
unbind: 只调用一次, 指令与元素解绑时调用。

钩子函数参数

el: 指令所绑定的元素,可以用来直接操作 DOM 。
binding: 一个对象,包含以下属性:

  • name: 指令名,不包括 v- 前缀。
  • value: 指令的绑定值, 例如: v-my-directive=“1 + 1”, value 的值是 2。
  • oldValue: 指令绑定的前一个值,仅在 update 和componentUpdated 钩子中可用。无论值是否改变都可用。
  • expression: 绑定值的表达式或变量名。 例如 v-my-directive=“1 + 1” , expression 的值是 “1 + 1”。
  • arg: 传给指令的参数。例如 v-my-directive:foo, arg 的值是 “foo”。
  • modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }。

vnode: Vue 编译生成的虚拟节点。

oldVnode: 上一个虚拟节点,仅在 update 和componentUpdated 钩子中可用。

示例:演示这些参数的使用:

<div id="app">
	<p v-message:hello.a.b="info"></p>
</div>

<script>
	new Vue({
		el: '#app',
		data: {
			info: '钩子函数的参数'
		},
		directives: {
			//定义局部指令,英文字母大写
			'message': {
				bind: function(el, binding, vnode) {
					el.innerHTML = "指令名:" + binding.name + "<br/>" +
						"指令的绑定值:" + binding.value + "<br/>" +
						"绑定值的表达式或变量名:" + binding.expression + "<br/>" +
						"传给指令的参数:" + binding.arg + "<br/>" +
						"指令的修饰符:" + JSON.stringify(binding.modifiers) //将JavaScript对象或数组转换为字符串
				}
			}
		}
	})
</script>

在这里插入图片描述

其它

  • 有时候我们不需要其他钩子函数,我们可以简写函数
  • 指令函数可接受所有合法的 JavaScript 表达式

示例:

<div id="app">
	<p v-runoob="{color: 'green', text: '菜鸟教程!'}"></p>
</div>

<script>
	new Vue({
		el: '#app',
		data: {
			info: '钩子函数的参数'
		},
		directives: {
			'runoob': function(el, binding) {
				el.innerHTML = binding.value.text
				el.style.backgroundColor = binding.value.color
			}

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

vue(9):自定义指令 的相关文章

随机推荐

  • 短沟道效应 & 窄宽度效应 short channel effects & narrow width effects

    文章目录 1 概念 Narrow Width Effect 窄宽度效应 Short Channel effects 短沟道效应 阈值电压 Threshold voltage 2 阈值电压与沟道长和沟道宽的关系 Narrow channel
  • ATT&CK实战系列——红队实战(一)完整版

    前言 今天有大佬位推荐了这个靶场 然后就去了解了一下非常贴近实战 下载开干 靶场的描述 红队实战系列 主要以真实企业环境为实例搭建一系列靶场 通过练习 视频教程 博客三位一体学习 另外本次实战完全模拟ATT CK攻击链路进行搭建 开成完整闭
  • linux的jstack,jmap命令的正确安装附详细教程

    先执行命令 yum list showduplicate su root yum list showduplicate grep i java yum install java 11 openjdk devel x86 64 y jstac
  • 吃货联盟订餐系统项目----面向对象思路

    吃货联盟订餐系统项目 面向对象思路 思路 首先可以划分出四个类 菜单类 订单类 饭店类 测试类 菜单类中 需要用到菜单编号 菜单名称 菜单价格 点赞数四个属性 并根据这些属性创建一个带参构造以及getter setter方法 订单类中 需要
  • 生命在于折腾——SQL注入的实操(三)less11-15

    一 实操环境 1 操作系统 VMware虚拟机创建的win10系统 内存8GB 硬盘255GB 处理器AMD Ryzen 9 5900HX 2 操作项目 sql lib项目 本篇文章介绍关卡11 15 3 工具版本 phpstudy 8 1
  • 什么是node,node怎么用?

    Node js 是一个基于Chrome V8 引擎的JavaScript运行环境 Node js使用了一个事件驱动 非阻塞式I O的模型 使其轻量又高效 事件驱动 任务执行 发布者 订阅者 事件驱动 on emit 非阻塞 执行某一个任务的
  • 2021斯坦福CS224N课程笔记~3

    3 神经网络学习 手工计算梯度 Lecture 3 Neural net learning Gradients by hand matrix calculus and algorithmically the backpropagation
  • git拉取和推送如何指定远程服务器的ssh端口

    家里弄了个嵌入式服务器 里面安装了git 申请了动态公网ip 上行速度40Mbps 可比国内的服务器带宽大多了 所以要好好利用起来 但是由于是动态公网ip 因此做了端口映射 指定端口9999到嵌入式服务器的22端口 如何让git push
  • 劢领AT

    劢领AT 五分钟 一条指令设置WIFI模块直接连接MQTT服务器或者阿里云物联网平台 超级指令诞生缘由 超级指令详解 一 阿里云物联网套件超级指令 AT SAC 1 指令说明 2 指令示例 二 MQTT服务器超级指令 AT SMC 1 指令
  • Visual C++ 内存泄露检测工具(VLD)

    一 内存泄漏 1 什么是内存泄露 由于疏忽或者错误 异常安全 导致程序未能释放已经不再使用的内存的情况 内存泄露并非是指内存在物理上的消失 而是指程序失去了对该内存的控制 导致的资源浪费 2 内存泄露的分类 a 堆内存泄露 Heap Lea
  • vs静态编译解决找不到msvcp140.dll问题

    问题描述 win10中vs2015编写的程序生成release版本 拷贝到win7中运行 出现找不到msvcp140 dll问题 解决方法 将程序进行静态编译 1 使用release模式编译 2 项目属性中 C C 代码生成 中的运行库改为
  • CSS笔试题整合---不断更新

    第一套 50题 1 那个HTML5元素用于显示已知范围内的标量测量 D A
  • 大数据究竟是什么?一文让你认识并读懂大数据

    2017年 大数据已经从概念走向落地 2019年 中低端IT工程师紧随浪潮加速向大数据转型 企业对大数据人才争夺直接进入白热化阶段 因此 对于想学IT技术的人而言 我建议 直接选择学习大数据技术是符合潮流和就业需求的选择 一 大数据的意义
  • 使用JAVA控制AD域进行基本的操作详解

    前段时间 我接到了一个新任务 使用JAVA控制AD域进行基本的操作 经几天摸索也看来多位博友的代码 现在摸索出了一套较为详细的Java操控AD域的方法 废话不多说 现进入正题 一 安装域控服务器 什么是域控服务器我就不多说了 请各位自行百度
  • python copy()和deepcopy()解释(import copy)

    对于简单的 object 用 shallow copy 和 deep copy 没区别 复杂的 object 如 list 中套着 list 的情况 shallow copy 中的 子list 并未从原 object 真的 独立 出来 也就
  • 英语 面包为什么不可数?

    接下来我就来解释一下 因为首先面包的形态多种多样 不同的人就有不同的做法 有时候依据面包的形态很难界定面包到底是多少 个 其次面包通常不能直接出售 都要有包装的保护 同理 像蛋糕 巧克力 家具等 它们可以由创造者自由塑形 量化 又往往成一定
  • 金融区块链基础设施(浅析)

    想知道更多更多关于区块链技术知识 请百度 链客区块链技术问答社区 链客 有问必答 Optherium Labs是一家全球金融科技公司和区块链即服务提供商 是Linux Hyperledger和Crypto Valley基金会的成员 在欧盟获
  • SpringBoot使用Nacos动态配置数据源

    SpringBoot SpringCloud项目部署运行后 如果使用硬编码方式定义数据源 那么如果需要更换数据库 就只能通过更改源码并重启的方式来达成目的 而SpringCloud生态中有配置中心这一组件 我们可以将数据源连接属性编写在配置
  • centos7修改语言环境($LANG)

    文章目录 1 问题 2 系统环境 3 解决方案 1 问题 安装centos7系统时 我默认选择的是LANG zh CN UTF 8 在执行各种命令后 英文中掺杂的中文显得有点格格不入 于是我想要将语言环境改成全英文的 2 系统环境 root
  • vue(9):自定义指令

    自定义指令 除了默认设置的核心指令 v model 和 v show Vue 也允许注册自定义指令 示例 注册一个全局指令 v focus 该指令的功能是在页面加载时 元素获得焦点 div p 请输入 p div