1.自定义指令——全局指令
使用 Vue.directive() 定义全局指令
其中:参数1: 指令的名称,注意,在定义的时候,指令的前面不需要加 v- 前缀;参数2:是一个对象,这个对象身上,有一些指令相关的函数,这些函数可以在特定的阶段执行相关的操作。
2.自定义指令——私有指令
使用directives: {}定义私有指令
Html
<!-- 注意: Vue中所有的指令,在调用的时候,都以 v- 开头 -->
<div id="app2">
<input type="text" class="form-control" id="search" v-focus v-color>
<input type="text" class="form-control" id="search" v-focus v-color="'blue'">
</div>
Js
(1)全局指令
// 自定义一个获取文本框焦点的指令 v-focus
Vue.directive('focus', {
bind: function(el) { //每当指令绑定到元素上的时候,会立即执行这个 bind 函数,只执行一次
// 注意:在每个函数中,第一个参数,永远是el,表示被绑定了指令的元素,这个el参数,是一个原生的js对象
// 在元素刚绑定了指令的时候,还没有插入到DOM中去,这时候,调用 focus 方法没作用
// 因为,一个元素,只有插入DOM之后,才能获取焦点
// el.focus();
},
inserted: function(el) { //表示元素插入到DOM中的时候会执行,只触发一次
el.focus();
// 和 JS 行为相关的操作,最好写在 inserted 中去执行,防止 JS 行为不生效
},
updated: function(el) { //当VNode更新的时候会执行,可能会触发多次
}
});
// 自定义一个为文本框设置字体颜色的指令 v-color
Vue.directive('color', {
// 样式只要通过指令绑定给了元素,不管元素有没有被插入到页面中去,这个元素一定有了一个内联样式
// bind: function(el) {
// 和样式相关的操作可以定义在 bind 中
// el.style.color = 'red';
// }
bind: function(el, binding) {
console.log(binding.name, binding.value, binding.expression);
el.style.color = binding.value;
}
});
(2)私有指令
var vm2 = new Vue({
el: '#app2',
data: {
dt: new Date()
},
directives: { // 自定义私有指令
'fontweight': { // 设置字体大小
bind: function(el, binding) {
el.style.fontWeight = binding.value;
}
},
'fontsize': function(el,binding) { // 注意:这个 function 等同于把代码写到了 bind 和 update 中去
el.style.fontSize = parseInt(binding.value) + 'px';
}
}
})