一、 定义语法
- 局部指令:
new Vue({
directives: {指令名:配置对象}
})
或者
new Vue({
directives: {指令名:回调函数}
})
- 全局指令:
Vue.directive(指令名, 配置对象)
或者
Vue.directive(指令名, 回调函数)
二、配置对象中常用的三个回调:
- bind:指令与元素成功绑定时调用
- inserted:指令所在元素被插入页面时调用
- update:指令所在模板结构被重新解析时调用
三、备注:
- 指令定义时不加v-,但使用时要加v-。
- 指令名如果是多个单词,要使用kebab-case命名方式,不要使用camelCase命名。
需求:
- 定义一个v-bind指令,和v-text功能类似,但会把绑定的数值放大10倍。
- 定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。
<div id="root">
放大10倍后的n值是:<span v-big="n"></span>
<button @click="n++">点我n+1</button>
<input type="text" v-fbind:value="n">
</div>
new Vue({
el: '#root',
data: {
n: 1
},
directives: {
// big函数何时会被调用?1. 指令与元素成功绑定时(一上来);2. 指令所在的模板被重新解析时
// bind函数和update函数中的逻辑一样
big(element, binding) {
console.log(element, binding);
element.innerText = binding.value * 10;
},
fbind: {
// 指令与元素成功绑定时
bind(element, binding) {
element.value = binding.value;
},
// 指令所在元素被插入到页面时
inserted(element, binding) {
element.focus();
},
// 指令所在的模板被重新解析时
update(element, binding) {
element.value = binding.value;
}
}
}
});