将按钮权限放在store中
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
import store from './store'
new Vue({
store,
router,
render: h => h(App)
}).$mount('#app')
创建一个has指令
export default {
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>
- 指令绑定前
![在这里插入图片描述](https://img-blog.csdnimg.cn/746492d2f29742558d7d63e021e0fc2b.png)
- 绑定后
![在这里插入图片描述](https://img-blog.csdnimg.cn/9d6482975ac846d78e7fe2e02e0839c7.png)
实现原理
![在这里插入图片描述](https://img-blog.csdnimg.cn/e771c4ee725748b584eebe1fdf26f600.png)
- 指令的
inserted
方法,在指令插入到DOM
时会执行,vnode
参数能够取得store
中按钮的权限,再通过原生操作DOM的手段去控制按钮的显示