如何在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>
每个钩子函数都有几个参数可用,具体如下:
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组件是什么
-
Vue.js响应式数据如何实现
-
怎么将Vue.js应用程序与Drupal做一个集成
怎么将Vue.js应用程序与Drupal做一个集成本文小编为大家详...
-
Vue.js双向绑定的方法是什么
Vue.js双向绑定的方法是什么本篇内容主要讲解“Vue.js双向...
-
vue.js怎么下载安装
vue.js怎么下载安装本文小编为大家详细介绍“vue.js怎么下...
-
Vue.js组件化怎么实现
Vue.js组件化怎么实现本文小编为大家详细介绍“Vue.js组件...
-
vue.js跨域问题如何解决
vue.js跨域问题如何解决本文小编为大家详细介绍“vue.js跨...
-
Vue3中怎么用WeakMap作为缓存区
-
如何使用Vue.js和MJML创建响应式电子邮件
-
怎么在Vue.js中引入图片路径
今天就跟大家聊聊有关怎么在Vue.js中引入图片路径,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家...