v-指令确实是Vue的特色的语法,但是我们日常开发还是存在对所用技术的二次开发封装,所以我们需要知道v-自定义指令的知识。
v-自定义指令
directives
属性负责注册自定义v-指令,除了在组件实例中使用,还可以全局使用。
我们先讲局部的注册,最后讲全局的使用。
自定义指令结构
我们在组件实例中注册自定义v-指令:
new Vue({
el:'#app',
data:{
msg:'----',
},
directives: {
//v-kkk指令,指令定义对象
kkk: {
inserted: function () {
console.log("欸嘿!")
}
}
}
});
这下我们可以在el绑定的节点结构(或则模板中)中使用自定义指令:
<div id="app">
<div v-kkk></div>
</div>
自定义指令钩子函数
你发现自定义指令中出现了inserted
属性,其实是钩子函数,而且不止一个。
指令定义对象的钩子函数有:(官方)
- bind:只调用一次,
指令第一次绑定到元素时调用
。在这里可以进行一次性的初始化设置。 - inserted:被绑定元素
插入父节点时调用
(仅保证父节点存在,但不一定已被插入文档中)。 - update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
- componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
- unbind:只调用一次,指令与元素解绑时调用。
常用inserted钩子进行开发。
钩子函数参数
钩子函数的有默认传入的参数el
、binding
、vnode
和 oldVnode
。