自定义指令中的钩子函数

钩子函数

bind:

只调用一次,指令第一次绑定到元素时调用,这个钩子函数可以定义在绑定时执行一次的初始化动作。

inserted:

被绑定元素插入父节点时调用(父节点存在即可调用,不必存在document中)。

updated:

所在组件的VNode更新时调用,但是可能发生在其孩子的VNode更新之前,指令的值可能发生了改变也可能没有,但是你可以通过比较更新前后的值来忽悠不必要的模板更新(详细的钩子函数参数见下)

componentUpdated:

所在组件的VNode及其孩子的VNode全部更新时调用。
unbind:之调用一次,指令与元素解绑时调用。
接下来我们看一下钩子函数的参数(包括el,binding,vnode,oldVnode)

钩子函数的参数

el

指令所绑定的元素,可以用来直接操作DOM。

binding:

一个对象,包含以下属性
name:指令名,不包含 v- 前缀
value:指令的绑定值,例如:v-my-directive=“1+1”,value的值是2.
oldValue:指令绑定的前一个值,仅在updatehe compenentUpdate钩子中可用,无论值是否发生改变都可用。
expression:绑定值的字符串形式,例如v-my-directive=“1+1”,expression的值是“1+1”。
arg:传递给指令的参数,例如v-my-directive:foo。arr的值是"foo"
modifiers:一个包含修饰符的对象,例如:v-my-directive.foo.bar,修饰符对象modifiers的值是{foo:true,bar:true}

vnode

vue编译生成的虚拟节点,查阅vNode Api 了解更多详情
oldVnode:上一个虚拟节点,仅在update和ComponentUpdated钩子中可用

注意

处理el之外,其它参数都应该是只读的,尽量不要修改他们,如果需要钩子之间共享数据,建议通过元素的dataset来进行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章