定义指令
全局定义
1 2 3 4 5 6 7 8 9
| Vue.directive('mydirec1', { })
Vue.directive('mydirec2', { })
|
之后,所有的组件均可以使用mydirec1和mydirec2指令
1 2 3 4 5 6 7 8 9 10
| <template> <div> <MyComp v-mydirec1="js表达式" /> <div v-mydirec2="js表达式"> ... </div> <img v-mydirec1="js表达式" /> </div> </template>
|
局部定义
局部定义是指在某个组件中定义指令,和局部注册组件类似。
定义的指令仅在该组件中有效。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <template> <div> <MyComp v-mydirec1="js表达式" /> <div v-mydirec2="js表达式"> ... </div> <img v-mydirec1="js表达式" /> </div> </template>
<script> export default { directives: { mydirec1: { }, mydirec2: { } } } </script>
|
和全局注册组件一样,为了让指令更加通用,通常我们会把指令的配置提取到其他模块。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <template> <div> <MyComp v-mydirec1="js表达式" /> <div v-mydirec2="js表达式"> ... </div> <img v-mydirec1="js表达式" /> </div> </template>
<script> import mydirec1 from "@/directives/mydirec1"; import mydirec2 from "@/directives/mydirec2"; export default { directives: { mydirec1, mydirec2 } } </script>
|
指令配置对象
没有配置的指令,就像没有配置的组件一样,毫无意义
vue支持在指令中配置一些钩子函数,在适当的时机,vue会调用这些钩子函数并传入适当的参数,以便开发者完成自己想做的事情。
常用的钩子函数:
1 2 3 4 5 6 7 8 9 10 11 12
| { bind(){ }, inserted(){ }, update(){ } }
|
查看更多的钩子函数
每个钩子函数在调用时,vue都会向其传递一些参数,其中最重要的是前两个参数
1 2 3 4 5 6 7
| { bind(el, binding){ } }
|
binding 对象

查看更多binding对象的属性
配置简化
比较多的时候,在配置自定义指令时,我们都会配置两个钩子函数
1 2 3 4 5 6 7 8
| { bind(el, bingding){ }, update(el, bingding){ } }
|
这样,在元素绑定和更新时,都能运行到钩子函数
如果这两个钩子函数实现的功能相同,可以直接把指令配置简化为一个单独的函数:
1 2 3
| function(el, bingding){ }
|
更多的自定义指令用法见官网