需求描述
- 用户登录获取菜单、按钮、接口权限
- 页面上的按钮根据用户权限展示不同的样式(颜色、显示隐藏等)
实例解析
创建自定义指令
- directive / btn-right / btnRight.js
export default {
inserted(el, domVal, node) {
console.log('el', el);
console.log('domVal', domVal);
console.log('node', node);
let systemPower = [
'add', 'del', 'edit'
];
let flag = 0;
let reg = domVal.expression.split("'").join("");
systemPower.map((item0, index0) => {
if (reg == item0) {
flag += 1
}
});
if (flag == 0) {
el.classList.add("noBtnRight")
} else {
el.classList.remove("noBtnRight")
}
}
}
- directive / btn-right / index.js
import btnRight from './btnRight'
const install = Vue => {
Vue.directive('btnRight', btnRight)
}
if (window.Vue) {
window['btnRight'] = btnRight
Vue.use(install);
}
btnRight.install = install
export default btnRight
import btnRight from './directive/btn-right';
Vue.use(btnRight);
应用到标签
<div
class="linkJump"
v-btnRight="'add'"
@click="goToActDetail($event, scope.row)"
>
普通活动
</div>

- 上图为 btnRight.js 的打印结果,可看出能够获取到标签 div、自定义指令的传值 ‘add’、标签节点
- 在 btnRight.js 中判断出,当前标签传递的 ‘add’ 在权限列表中,所以视为有权限,不添加 ‘noBtnRight’ 类名

- 如果修改自定义标签传值为 ‘click’,去权限列表中查找,没有权限,则会添加上特殊类名 ‘noRight’


- 使用特殊类名就可以对无权限的元素进行操作,例如添加颜色、隐藏、禁止点击等
goToActDetail(e, item) {
if (e.target.classList.contains("noBtnRight")) {
} else {
}
},