vue-自定义指令

  有时候,我们仍不可避免的要对DOM进行底层的操作,这时候就要用到自定义指令。

  来看一个最简单的。

< body>
< div id= "app">
< input type= "text" v-focus>
</ div>
< script src= "./vue.js"></ script>
< script>
Vue. directive( 'focus',{
inserted: function( el){
el. focus();
}
})
var app = new Vue({
el: '#app'
})

  来一步一步解析它,指令是以"v-指令名的形式"写在你要绑定的DOM元素上,在DOM元素上注册好了指令,我们还要实现它,

Vue.directive('指令名',{函数}).这点跟组件的实现有点像,接下来,我们要在函数里面写什么呢,怎么写。

首先,自定义指令的选项是由几个钩子函数组成的:

bind:只调用一次,指令第一次绑定到元素时使用,用这个钩子函数,可以做一些初始化的动作;

inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在document之中);

update:被绑定元素在模板更新的时候调用;

componentUpdated:被绑定元素所在模板完成一次更新周期时调用;

unbind:只调用一次,指令与元素解绑时调用。

那么,写在钩子函数里的参数又是什么,有什么用?

  钩子函数常用的有两个参数,el和binding.

el——指令绑定的元素,可以直接来操作DOM。

binding:一个对象,包含以下几个属性:

      name:指令名,不包括v-前缀、

     value:指令绑定的值 ,比如说 v-mydir="1+1",这里的value为2.

     oldValue:指令绑定的前一个值,在updata和componentUpdated钩子函数中可用,

     express:绑定值的字符串表示,比如上面那个例子的express为“1+1”,

     arg:传递给指令的参数,比如说: v-mydir:foo="1+1"  arg为foo。 

    modifiers:一个包含修饰符的对象,比如说:v-mydir.foo.bar,修饰符对象modifiers的值是 {foo:true,bar:ture}.

vnode:Vue编译生成的虚拟节点。

oldVnode:上一个虚拟节点,仅在update和componentUpdated钩子中有效。

来看实例,验证一下,上面的属性。

iv id= "app">
< div v-test:msg. a. b= "message">
</ div>
</ div>
< script>
Vue. directive( 'test', {
bind: function( el, binding, vnode){
var keys =[];
for( var i in vnode){
keys. push(i);
}
el. innerHTML =
'name:' + binding. name + '<br>' +
'value:' + binding. value + '<br>' +
'expression:' + binding. expression + '<br>' +
'argument:' + binding. arg + '<br>' +
'modifiers:' + JSON. stringify( binding. modifiers) + '<br>' +
'vnode keys:' + keys. join( ',')
}
});
var app = new Vue({
el: '#app',
data:{
message: 'some text'
}
})

结果显示为:


为指令传入多个值,只需要传入一个字面量对象就好了。

< body>
< div id= "app">
< div v-test= "{msg:'hello',name:'Aresn'}"></ div>
</ div>
< script src= "./vue.js"></ script>
< script>
Vue. directive( 'test',{
bind: function( el, binding, vnode){
console. log( binding. value. msg)
}
})
var app = new Vue({
el: '#app'
})
</ script>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值