vue根据权限动态渲染按钮、组件等的函数式组件实现
作者:donggua_123
这篇文章主要介绍了vue根据权限动态渲染按钮、组件等的函数式组件实现方式,具有很好的参考价值,希望杜大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
前端工作中对于权限的需求是难免的,最近项目中就有这样的需求了。
后台管理员可以新增前台成员,不通的成员具有不同的权限,有权限的人员可以看到一些操作按钮或者数据列表,反之则看不到。
那么也就是说,前端需要根据登录用户的权限来渲染指定的dom。
1、components文件下新建authorized文件夹
文件夹下新建auth.js校验权限
const checkAuth = (authName) => {
let authMap = ['admin', 'superAdmin', 'admin-1', 'landq'] // 根据实际项目需求配置
return authMap.includes(authName);
}
export default checkAuth;这里的authMap可以是从后台动态请求的,也可以是前端配置好的,甚至可以是其它格式的数据,根据各人业务需求处理,大致思路是一样的。
2、authorized文件夹下新建index.vue
<!-- 函数式组件 -->
<script>
import checkAuthorized from './auth';
export default {
functional: true, // 函数式组件
props: {
// 接收参数
authName: {
type: String,
required: true,
default: ''
}
},
render(h, context) {
let { props, scopedSlots } = context;
return checkAuthorized(props.authName)
? scopedSlots.default({
name: props.authName
})
: null;
}
};
</script>这里接收一个参数,登录用户名,在render函数里做进一步判断,如果权限为true则返回默认插槽里的dom,即渲染指定元素,反之返回null,不渲染
3、全局注册main.js
、、、
import Authorized from '@/components/authorized'; // 权限
Vue.config.productionTip = false;
Vue.component('Authorized', Authorized);
new Vue({
router,
store,
render: h => h(App)
}).$mount("#app");4、使用
<!-- authorized -->
<template>
<div class="authorized">
<Authorized authName="admin">
<el-button type="primary" slot-scope="data">{{
data.name
}}</el-button>
</Authorized>
</div>
</template><script>
export default {
components: {},
data() {
return {};
},
created() {},
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
computed: {},
//方法集合
methods: {}
};
</script><style lang='scss' scoped> //@import url(); 引入公共css类 </style>
当authName='admin'时,admin在authMap数组中,按钮渲染了

当authName='123'时便不会渲染

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
