理解Vue2.x和Vue3.x自定义指令用法及钩子函数原理
作者:SpringSir 发布时间:2024-05-28 15:46:41
Vue2.x用法
全局注册
Vue.directive( 指令名, { 自定义指令生命周期 } )
局部注册
directives: { 指令名, { 自定义指令生命周期 } }
使用
v-指令名: 属性名.修饰符=“value值”
钩子函数
bind
- 自定义指令绑定到 DOM 后调用. 只调用一次, 注意: 只是加入进了DOM, 但是渲染没有完成
inserted
- 自定义指令所在DOM, 插入到父 DOM 后调用, 渲染已完成(最最重要)
update
- 元素更新, 但子元素尚未更新, 将调用此钩子( 自定义指令所在组件更新时执行, 但是不保证更新完成 ) —> 和自定义所在组件有关
componentUpdated
- 组件和子级更新后执行( 自定义指令所在组件更新完成, 且子组件也完成更新 ),
—> 和自定义所在组件有关
unbind
- 解绑(销毁) .( 自定义指令所在 DOM 销毁时执行 ). 只调用一次
钩子函数的参数
注意: 自定义指令中, 都不能直接使用this
1.el:
当前指令所在的dom元素。
2.binding:
是一个对象, 表示当前指令上的属性、修饰符、value值等信息。只有value最重要, 常用
arg
:String, 属性名 。例如 v-my-directive:foo 中,属性名为 “foo”。
modifiers
:Object, 包含所有修饰符的一个对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。
name
:String, 指令名,不包括 v- 前缀。
rawName
, String, 完整指令名,例如 v-my-directive:foo.bar=“1 + 1” 中, 完整指令名就是 v-my-directive:foo.bar=“1 + 1”
value
:Any, 指令绑定的当前值,例如:v-my-directive=“1 + 1” 中,绑定值为 2。(最最重要)
expression
:String, 解析的哪一个值、表达式。例如 v-my-directive=“1 + 1” 中,表达式为 “1 + 1”。
oldValue
:Any, 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
oldArg
:Any, 指令属性名的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
3.vnode
:当前节点信息, 可以获取, 当前指令所在组件的实例 vnode.context - 当前指令所在的实例对象
4.oldVnode
:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。
Vue3.x用法
用法和 Vue2.x 一样
全局注册
Vue.directive( 指令名, { 自定义指令生命周期 } )
局部注册
directives: { 指令名, { 自定义指令生命周期 } }
使用
v-指令名: 属性名.修饰符=“value值”
以插件的形式, 进行全局注册
钩子函数
较 Vue2.x 相比, 钩子函数有变化
最终的 API 如下:
const MyDirective = {
created(el, binding, vnode, prevVnode) {}, // 新增
beforeMount() {},
mounted() {},
beforeUpdate() {}, // 新增
updated() {},
beforeUnmount() {}, // 新增
unmounted() {}
}
created
- 自定义指令所在组件, 创建后
beforeMount
- 就是Vue2.x中的 bind, 自定义指令绑定到 DOM 后调用. 只调用一次, 注意: 只是加入进了DOM, 但是渲染没有完成
mounted
- 就是Vue2.x中的 inserted, 自定义指令所在DOM, 插入到父 DOM 后调用, 渲染已完成(最最重要)
beforeUpdate
- 自定义指令所在 DOM, 更新之前调用
updated
- 就是Vue2.x中的 componentUpdated
beforeUnmount
- 销毁前
unmounted
- 销毁后
来源:https://blog.csdn.net/weixin_46873254/article/details/120404197
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 详细代码见仓库github地址:github.com/nerkeler/account重要提示程序默认密码:password密钥位置:./r
- CocosCreator版本:2.4.2jszip的实际项目应用游戏中有大量配置的情况下,文件会变得非常大,所以有些游戏会采用zip包压缩解
- 终于找到bug原因!记一下;还是不熟悉平台的原因造成的! Q:为什么会出现两个模型对象在同一个文件中一起运行,当直接读取他们分开运行时训练出
- 背景我们在操作APP应用时,有些需要从一个元素滑动到另外一个元素时,这时候我们无法确定坐标,所以swipe 根据坐标滑动方式就无法使用了,如
- 代码如下import unittestdir = "D:\\work_doc\\pycharm2\\python_Basics&q
- 如何在独立服务器上创建用户?假设独立服务器是intels,我们用ADSI来创建一个用户liyanbing,初始口令定为3625:
- 登录SYS创建临时表空间/*创建临时表空间 */create temporary tablespace 表空间名 t
- 一、route()路由概述功能:将URL绑定到函数路由函数route()的调用有两种方式:静态路由和动态路由二、静态路由和动态路径方式1:静
- 在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值还会保持上次的状态。即删除之前如果有四
- python数组和矩阵先创建一个一维数组直接定义一个数组:a = [1,2,3,4,5]b = ['a','c
- 下载Git安装文件:GIt官网下载地址:Git-2.6.3-64-bit.exe然后就进入了Git的安装界面,如图:Git安装界面和Node
- <!--#include file="config.asp" -->&nbs
- python可以编写win程序。win程序的格式是exe,下面我们就来看一下使用python编写exe程序的方法。编写好python程序后p
- Tips 1:新增数据表与定义字段更加直观若要建立新数据表,可以在开启数据库后,直接单击“创建”标签,在“表”选项组中单击“表”按钮,即可新
- 目录1. 单变量 :=2. 多变量 :=3. 小结:=??Go 语言中 = 和 := 有什么区别1. 单变量 :=Go 语言中新增了一个特殊
- 关于使用CTE(公用表表达式)的递归查询----SQL Server 2005及以上版本公用表表达式 (CTE) 具有一个重要的优点,那就是
- 执行时间方法1import datetimestarttime = datetime.datetime.now()#long running
- linspace生成有序列表,重点在数据范围与数据个数上linspace(0,1,11),即从0到1闭区间,划分为11个数据点>>
- 一、定义字典是一系列的键-值对,键与值之间用冒号隔开,而键-值对之间用逗号隔开,其中的“键”和&am
- 注意事项Soft-NMS对于大多数数据集而言,作用比较小,提升效果非常不明显,它起作用的地方是大量密集的同类重叠场景,大量密集的不同类重叠场