vue知识点之:添加自定义指令

permission.js


import store from '@/store'

export default{
  inserted(el, binding, vnode) {
    const { value } = binding
    const roles = store.getters && store.getters.roles

    if (value && value instanceof Array && value.length > 0) {
      const permissionRoles = value

      const hasPermission = roles.some(role => {
        return permissionRoles.includes(role)
      })

      if (!hasPermission) {
        el.parentNode && el.parentNode.removeChild(el)
      }
    } else {
      throw new Error(`need roles! Like v-permission="['admin','editor']"`)
    }
  }
}

index.js

import permission from './permission'

const install = function(Vue) {
  Vue.directive('permission', permission)
}

if (window.Vue) {
  window['permission'] = permission
  Vue.use(install); // eslint-disable-line
}

permission.install = install
export default permission

用法:

import permission from '@/directive/permission/index.js' // 权限判断指令

name: 'DirectivePermission',
components: { SwitchRoles },
directives: { permission }


<span v-permission="['editor']" class="permission-alert">
        Only
        <el-tag class="permission-tag" size="small">editor</el-tag> can see this
</span>

注:使用install 的目的是 确保多次引用的情况下只加载一次

posted @ 2018-10-24 09:08  二月花开  阅读(3213)  评论(0)    收藏  举报