简述自定义指令注册-directive

262 阅读2分钟

简介

Vue中内置很多指令,如v-model,v-show,v-for等,若无法满足我们的需求时,Vue 也允许注册自定义指令,主要分为全局自定义注册和局部自定义注册。

钩子函数

指令定义函数提供了几个钩子函数:

  • bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
  • inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
  • update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
  • componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。
  • unbind: 只调用一次, 指令与元素解绑时调用。

全局注册

语法

应用场景1:给头像设置默认值;

//注册一个全局自定义指令v-errorImg

Vue.directive("errorImg",{

 inserted(el,binding){
 //el是指令所绑定的元素,可以用来直接操作 DOM。
 //binding是一个对象,其中有个属性是value值,指指令的绑定值,
 
   el.src = binding.value 
   //当图片有地址没有加载成功时,会报错触发图片的事件----onerror
 
  el.onerror = function(){
 //当图片出现异常时,会将指令配置的默认图片设置为该图片内容
   el.src = binding.value 
  
  } 
 }
})

应用场景2:当页面加载时,input元素将获得焦点自动聚焦: image.png

// 注册一个全局自定义指令 v-focus
    Vue.directive('focus', {
    
  // 当指令绑定的元素被插入DOM树上时执行
  inserted (el) {
  
    // 触发标签的事件方法
    el.focus()
  }
})

局部注册

对于局部组件,我们需要在组件的钩子函数directives中进行声明。

语法

directives: {
        focus: {
            inserted(el){
                el.focus()
            }
        }
    }