首页 > 语言 > JavaScript > 正文

简单学习vue指令directive

2024-05-06 15:07:29
字体:
来源:转载
供稿:网友

本文为大家分享了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 。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选