vue-directive自定义指令

基础概念

主要是官网内容,对指令的基本内容进行介绍

应用情景:

对dom元素进行操作时

分类:

  • 全局指令
  Vue.directive('name', {
      inserted: function (el) {
        // content
      }
  })
  • 局部指令
 directives: {
     name: {
         // content
     }
 }

使用 v-name,如

钩子函数

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

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

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

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

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

如果是在bindupdate上做操作,而不关心其它的,可以合并钩子

Vue.directive('name', function (el, binding) {
  // content
})

钩子函数参数(el,binding,vnode,oldVnode)

  • el 指令绑定的元素,可直接操作dom
  • binding 是一个对象
    • name 指令名,不包含v-
    • value 指令绑定的值
    • oldValue 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
    • expression 绑定值的字符串形式 不会计算出来 例如 v-my-directive:foo, arg 的值是 "foo"。
    • modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }。
    • vnode: Vue 编译生成的虚拟节点
    • oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。
  • vnode
  • oldVnode

项目使用

控制按钮权限

根据不同的用户角色控制按钮是否出现

let btnObj =[]   //存放有关按钮的code码  项目中是结合vuex一起的
// 移除
Vue.directive('btnCode', {
    inserted: (el, binding) => {
        if(!btnObj.includes(binding.value)){
            console.log(el.parentNode.removeChild(el))
        }
    }
})
// display:none
Vue.directive('btnCodes', {
    inserted: (el, binding) => {
        if(!btnObj.includes(binding.value)){
            console.log(el)
            console.log(el.style.display = 'none')
        }
    }
})

使用

    test3
// 这边如果有需要也可以传对象 v-btnCode="{key: value}" 在指令中的取值就是 binding.value.key
    test4

以上是部分关于dirctive的代码,实际项目中btn的code值会结合 vuex一起

延伸

remove() 和 display

你可能感兴趣的:(vue-directive自定义指令)