本文为大家分享了vue指令directive的使用方法,供大家参考,具体内容如下
1.指令的注册
指令跟组件一样需要注册才能使用,同样有两种方式,一种是全局注册:
Vue.directive('dirName',function(){ //定义指令});
另外一种是局部注册:
new Vue({ directives:{ dirName:{ //定义指令 } }});
2.指令的定义
指令定义,官方提供了五个钩子函数来供我们使用,分别代表了一个组件的各个生命周期
bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。
componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。
unbind: 只调用一次, 指令与元素解绑时调用。
在这里其他几个都好理解,关于模板更新(update)这里,本人的理解是:该指令所在的模板有变化而需要重新渲染的时候,比如当一个输入框的model发生了变化就会触发指令。当然此处说的比较模糊,具体的还有待研究。
这段代码可以实现关于update的使用
<div id="app"> <input type="text" v-focus="name" v-model="name" :data-name="name"> <button type="button" @click="name='zw'">click</button> <!--当点击按钮的时候name改变,继而触发update中的方法--></div><script> Vue.directive('focus',{ bind: function(el, binding){ console.log('bind:',binding.value); }, inserted: function(el, binding){ console.log('insert:',binding.value); }, update: function(el, binding, vnode, oldVnode){ el.focus(); console.log(el.dataset.name);//这里的数据是可以动态绑定的 console.table({ name:binding.name, value:binding.value, oldValue:binding.oldValue, expression:binding.expression, arg:binding.arg, modifiers:binding.modifiers, vnode:vnode, oldVnode:oldVnode }); }, componentUpdated: function(el, binding){ console.log('componentUpdated:',binding.name); }});new Vue({ el:'#app', data:{ name:'zwzhai' }});</script>
3.钩子函数的定义
以下是官方提供的几个参数:
el: 指令所绑定的元素,可以用来直接操作 DOM 。
新闻热点
疑难解答
图片精选