1.路由:
{
path: '/permission',
component: () => import('../views/permission/index.vue'),
name: '权限测试',
meta: { permissionList: ['add', 'edit'] }, //页面需要的权限
}
2.页面权限控制
<template>
<div>
<h3>按钮权限</h3>
<button v-permission="'add'">新增</button>
<button v-permission="'edit'">编辑</button>
<button v-permission="'delete'">删除</button>
</div>
</template>
<script>
export default {
name: 'permissionName',
directives: {
permission: {
bind(el, binding, vnode) {
const { value } = binding; // add/edit/delete
const { permissionList } = vnode.context.$route.meta;
if (permissionList.indexOf(value) === -1) {
el.style.display = "none"
// el.parentNode.removeChild(el); 搭配inserted
}
}
}
}
}
</script>
3.总结:bind
和 inserted
- 共同点: dom插入都会调用,bind在inserted之前
- 不同点:
1.bind 时父节点为 null,inserted 时父节点存在。
2. bind是在dom树绘制前调用,inserted在dom树绘制后调用
bind: function (el) {
console.log(el.parentNode) // null
console.log('bind')
},
inserted: function (el) {
console.log(el.parentNode) // <div class="directive-box">...</div>
console.log('inserted')
}