钩子函数
- bind
- 只调用一次,指令第一次绑定到元素时调用
- 适用于绑定
css
样式
- inserted
- 被绑定元素插入父节点时调用
- 适用于绑定
js
方法
- update
- 所在组件的
VNode
更新是调用
- 所在组件的
钩子函数参数
el
- 指令绑定元素,可以用于直接操作DOMbinding
- 一个对象name
指令名value
指令绑定值(可以理解为外部参数传递)- 例如:
v-my-directive = "1 + 1"
绑定值为2
- 支持对象形式
- 例如:
oldValue
指令绑定前一个值expression
字符串形式的指令表达式- 例如:
v-my-directive = "1 + 1"
表达式为1 + 1
- 例如:
arg
:传给指令的参数,可选。例如v-my-directive:foo
中,参数为"foo"
。modifiers
:一个包含修饰符的对象。例如:v-my-directive.foo.bar
中,修饰符对象为{ foo: true, bar: true }
。
注意要点
-
所有的指令都必须以
v-
开头 -
js
中定义需以驼峰式命名 -
html
中调用以-
进行分割<input type="text" v-model='keywords' placeholder="请输入搜索内容" v-color-test="'blue'"> <script> Vue.directive('colorTest',function(el,binding){ el.style.color = binding.value }) </script>
全局定义
// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
私有定义
const vue = new Vue({
directives: {
focus: {
// 指令的定义
inserted: function (el) {
el.focus()
}
}
}
})
简写
- 在很多时候,你可能想在
bind
和update
时触发相同行为,而不关心其它的钩子。比如这样写:
Vue.directive('color-swatch', function (el, binding) {
el.style.backgroundColor = binding.value
})