vue除了内置的核心指令(v-model 、v-show)外,也允许注册自定义指令,这对vue的扩展提供了很大的方便,同时vue的社区很活跃,相信会有很多有意思的指令分享。
基本简单的自定义指令使用:
v-focus的使用时,改input的元素会自动获取焦点,并改变color的颜色。
<body>
<div id="app">
<input v-focus v-model:value="n" type="text" />
</div>
<script>
Vue.directive('focus',{
inserted:function(el){
el.focus()
el.style.color="red";
}
});
var app=new Vue({
el:'#app',
data:{
n:'110'
}
})
</script>
</body>
局部的directives的使用 <input v-alert type="text" /> 会对input value赋值,改变字体颜色
directives:{
alert:{
inserted:function(el){
el.value="directives";
el.style.color="red";
}
}
}
钩子函数
bind | 只调用一次 |
inserted | 被插入父节点时调用 |
update | 模板更新时 |
componentUpdated | 被绑定元素所在模板更新一次完成时调用 |
unbind | 只调用一次指令与元素解绑时调用 |
钩子函数参数
el:指令所绑定的元素
binding:一个对象
属性:
name =>指令名
value =>绑定的值
oldValue=>绑定的前一个值
expression=>绑定值的字符串形式
agr:传给指令的参数 v-focus:agrname (agr即是agrname)
modifiers:一个包含修饰符的对象 v-focus:foo.bar(modifiers的值就是{foo:true,bar:true})
vnode:vue虚拟节点
oldVnode:上一个虚拟节点
通常情况下我们不需要很复杂的自定义指令,只是需要 bind 和update 重复动作,vue也提供了简写形式
Vue.directive('bg',function(el,binding){
el.style.background=binding.value;
});