指令实现按钮级别权限控制

将按钮权限放在store中

  • store/index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
  	// 按钮权限
    buttonStatus: {
      submit: true,
      approve: false,
      reject: false
    }
  }
})
export default store
  • 在main.js注入
import store from './store'
new Vue({
  store,
  router,
  render: h => h(App)
}).$mount('#app')

创建一个has指令

export default {
  // 指令插入到DOM时
  inserted (el, binding, vnode) {
    console.log('binding', binding, vnode)
    // 获取按钮是属于什么按钮
    let btnValue = binding.value
    // 获取按钮权限
    let bol = vnode.context.$store.state.buttonStatus[btnValue]
    // 判断显示与隐藏
    !bol && el.parentNode.removeChild(el)
  },
}

在页面中使用

<template>
  <div>
    <a-button v-has="'submit'">提交</a-button>
    <a-button v-has="'approve'" type="primary" style="margin-left:10px">批准</a-button>
    <a-button v-has="'reject'" style="margin-left:10px">退回</a-button>
  </div>
</template>

<script>
import has from '@/directives/has'
export default {
  name: 'authority',
  directives: {
    has
  },
  data () {
    return {
      
    }
  },

  mounted() {
    
  },

  methods: {
    
  }
}
</script>

<style lang="less" scoped>

</style>
  • 指令绑定前
    在这里插入图片描述
  • 绑定后
    在这里插入图片描述

实现原理

在这里插入图片描述

  • 指令的inserted方法,在指令插入到DOM时会执行,vnode参数能够取得store中按钮的权限,再通过原生操作DOM的手段去控制按钮的显示
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值