如何在Vue.js中自定义指令

本篇文章给大家分享的是有关如何在Vue.js中自定义指令,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

自定义指令

自定义指令的注册方法和组件很像,也分全局注册和局部注册,比如注册一个v-focus指令用于在<input>、<textarea>元素初始化时自动获得焦点,共有两种写法:

//全局注册
Vue.directive('focus',{
//指令选项
});


//局部注册
varapp=newVue({
el:'#app',
directive:{
focus:{
//指令选项
}
}
});

自定义指令的选项是由几个钩子函数组成的,每个都是可选的。

自定义指令的各个选项如下:

  • bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。

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

  • update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。

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

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

可以根据需求在不同的钩子函数内完成逻辑代码,例如上面的v-focus,我们希望在元素插入父节点时就调用,那用到的最好是inserted。

<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<metahttp-equiv="X-UA-Compatible"content="ie=edge">
<scriptsrc="https://unpkg.com/vue/dist/vue.js"></script>
<title>自定义指令</title>
</head>
<body>
<divid="app">
<inputtype="text"v-focus>
</div>
<script>
Vue.directive('focus',{
inserted:function(el){
//聚焦元素
el.focus();
}
});

varapp=newVue({
el:'#app'
});
</script>
</body>
</html>

如何在Vue.js中自定义指令

每个钩子函数都有几个参数可用,具体如下:

  • el: 指令所绑定的元素,可以用来直接操作DOM

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

name:指令名,不包括v-前缀 valule:指令的绑定值,例如v-my-directive=“1 + 1”,value的值是2 oldValue:指令绑定的前一个值,仅在update和componentUpdated钩子中可用。无论值是否改变都可用 expression:绑定值的字符串形式。例如v-my-directive=“1 + 1”,expression的值是”1 + 1“ arg:传给指令的参数。例如v-my-directive:foo,arg的值是foo modifiers:一个包含修饰符的对象。例如v-my-directive.foo.bar,修饰符对象modifiers的值是{ foo:true, bar:true}

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

  • oldVnode: 上一个虚拟节点仅在update和componentUpdated钩子中可用。

示例:

<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<metahttp-equiv="X-UA-Compatible"content="ie=edge">
<scriptsrc="https://unpkg.com/vue/dist/vue.js"></script>
<title>自定义指令</title>
</head>
<body>
<divid="app">
<divv-test:msg.a.b="message"></div>
</div>
<script>
Vue.directive('test',{
bind:function(el,binding,vnode){
varkeys=[];
for(variinvnode){
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/>'+
'vnodekeys'+keys.join(',');
}
});

varapp=newVue({
el:'#app',
data:{
message:'sometext'
}
});
</script>
</body>
</html>

如何在Vue.js中自定义指令

以上就是如何在Vue.js中自定义指令,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注恰卡编程网行业资讯频道。

发布于 2021-03-24 01:22:36
收藏
分享
海报
0 条评论
178
上一篇:swagger怎么在asp.net core 3.0项目中使用 下一篇:如何在.Net Core中使用ObjectPool
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码