Vue 自定义指令
2022-04-21
在接触 Vue 自定义指令的之前,我们需要了解到 钩子函数
,在 Windows 中,钩子函数实在 Windows 消息处理机制中的一部分,可以通过设置钩子来实现自己想要的需要效果。在 Vue 中每个被创建的实例都需要经过一系列初始化的过程,如果需要设置数据监听、编译或挂载DOM时,会调用一个生命周期
的钩子,而此时我们可以在此加入一些code来实现自己想要的效果。
钩子函数
钩子函数即在Vue实例中插入一段code来满足自己下需求,截至vue 2.x 版本内,共支持的钩子函数共有:
ID | DA |
---|---|
bind | 只调用一次,指令第一次绑定到元素的时候调用,一般进行一次性的初始化设置 |
inserted | 被绑定元素插入父节点时调用 |
update | 被绑定元素的模板被更新时进行调用,无论绑定值是否变化。通过比较更新前和更新后的值,可以忽略不必要的模板进行更新 |
componentUpdate | 被绑定的元素所在模板完成一次新的周期时被调用 |
unbind | 指令与元素解绑时进行调用一次 |
钩子参数
ID | DA |
---|---|
el | 指令绑定的元素 |
binding | 一个对象且包含以下属性 |
name 指令名(不需要包括 v- 前缀) | |
value 指令的绑定值 | |
oldValue | |
expression 字符串形式的表达式指令 | |
arg 传给指令的参数,如 v-directive:foo 其中参数为 foo |
|
modifiers | |
vnode | Vue 编译生成的虚拟节点 |
oldVnode | 上一个虚拟节点,仅在 update 、 componentUpdated 钩子中使用``` |
自定义指令
全局指令
我们以一个非常经典的案例作为一个例子,当页面加载的时候,该选素将会获得焦点:
1 | <div id="app"> |
通过 directive
我们注册了一个名为focus
的全局组件,其主要作用就是:“当该页面加载的时候”,他会自动获取焦点仅此而已,并且我们还使用了inserted
钩子函数,以用于绑定父节点中欧调用focus
。
局部指令
通常而言,全局自定义指令与局部自定义指令之间的区别可以从code看出,全局注册指令是单独来写的即:
1 | Vue.directive('focus', { |
而局部自定义指令是在初始化vue
时写的,即之可以在本身的Vue实例中进行使用,除此之外他们之间的区别还可以是一个是通过directive
来定义,另一个则是通过使用directives
来实现的。
1 | <div id="app"> |