新手上路。项目需求比较简单,不要求控制到按钮,只需控制到页面,有权限显示,没有权限不显示该页面。

网上很多方法,看的好几脸懵逼,不确定用什么方法。直到搜到以下demo,有了demo赶脚拥有了上帝视角,在此基础上改成自己适用的。

1.基于Vue实现后台系统权限控制这是个比较华丽的demo,但是对于我来说页面很多,反而很难提取到某个功能关键代码。
2.Vue动态菜单(路由)的实现方案(beforeEach+addRoutes+elementUI)这个简单易懂。

看代码还是容易的,就不贴我的实现了,记录下主要步骤:
1.最重要的就是本地路由表了
meta下的roles属性控制了是否在菜单中显示该页面,这个demo中用的是用户角色,我的项目中没有分配角色,后端返回给我有权限的菜单list,因此我的roles属性直接填写菜单名称即可匹配。
跳转,显示很多都读取这个文件内容。根据自己情况增删属性

//代码位置:router/index.js{path: '',component: layout, //整体页面的布局(包含左侧菜单跟主内容区域)children: [{path: 'main',component: main,meta: {title: '首页', //菜单名称roles: ['user', 'admin'], //当前菜单哪些角色可以看到 (我的这里改为菜单名称)icon: 'el-icon-info' //菜单左侧的icon图标}}]}

2.向上面roles中塞数据
用到了localStorage,我理解为全局变量,我的这篇博客 1.2有写

登录后,拿到权限存到变量中

let getUserRole = this.formModel.user === 'admin' ? 'admin' : 'user'localStorage.setItem('userRole', getUserRole)
//代码位置:src/permission.js// 取到用户的角色let GetRole = localStorage.getItem("userRole")//。。。demo中有,去掉一些逻辑,只展示如何添加到roles// 4.将生成好的路由addRoutesrouter.addRoutes(fixedRouter.concat(getRoutes))

这里roles已经有值了,这两步是最重要的,可以实现过滤。剩下就是渲染菜单的组件sideMeuns.vue重新生成左侧菜单。
菜单中显示也是通过读取路由数据,router/index.js中要调成自己合适的结构。

demo中我修改的地方:
1.左侧菜单是通过router-link组件跳转的,加上背景色,会有紫色下划线,感觉很丑。在父组件menu中加上router也可跳转。

<el-aside class="slider_container"><el-menubackground-color="#304156"router><!-- 菜单组件 --><side-Meuns :routes="getMyRoutes"></side-Meuns></el-menu>

2.如果菜单下只有一个子菜单时,就不显示它的父菜单了。不符合我的业务需求
一级菜单也需要显示主菜单,添加以下代码。

<!-- 一级菜单的情况 --><template v-if="item.children&&item.children.length<=1"><el-submenu :index="item.path"><template slot="title"><!-- 设置icon --><i v-if="item.meta" :class="item.meta.icon"></i><!-- 菜单名称 -->{{ item.title }}</template>

3.增加面包屑导航栏
增加导航栏子组件breadcrumbNav.vue:

<template><el-breadcrumb class="app-breadcrumb" separator="/"><transition-group><el-breadcrumb-item  v-for="(item,index) in levelList" :key="item.path" v-if="item.meta.title"><span   v-if='item.redirect==="noredirect"||index==levelList.length-1' class="no-redirect">{{item.meta.title}}</span><router-link   v-else :to="item.redirect||item.path">{{item.meta.title}}</router-link></el-breadcrumb-item></transition-group></el-breadcrumb>
</template>
<script>export default {name: "idnex",data(){return {levelList:null}},created() {this.getBreadcrumb()},watch:{$route(){this.getBreadcrumb()}},methods:{getBreadcrumb(){let matched=this.$route.matched.filter(item=>item.name)//$route.matched 将会是一个包含从上到下的所有对象 (副本)。const first=matched[0]if(first && first.name !=='dashboard'){//$route.name当前路由名称  ;$route.redirectedFrom重定向来源的路由的名字matched=[{ path: '/dashboard', meta: { title: 'dashboard' }}].concat(matched)}this.levelList=matched}}}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>.app-breadcrumb.el-breadcrumb {display: inline-block;font-size: 14px;line-height: 50px;margin-left: 10px;.no-redirect {color: #97a8be;cursor: text;}}
</style>

在父组件中添加

 <!-- 面包屑导航 --><breadcrumbNav :currentPath="breads"></breadcrumbNav><script>      import breadcrumbNav from "../common/breadcrumbNav"; //面包屑路径</script>export default {components: {sideMeuns,breadcrumbNav},}

仅记录,如有错误欢迎指正。
有更优雅的方案,期待分享交流。

vue 不同权限显示不同页面相关推荐

  1. vue 根据权限显示不同页面解决方案

    第一步:在登陆成功后获取权限列表, 获取的路由权限可以进行Session存储.并定义一个默认的路由.根据所拥有的权限添加进去所显示的路由. import Vue from 'vue' import V ...

  2. vue里面怎么删除部分页面_基于VUE选择上传图片并页面显示(图片可删除)

    基于VUE选择上传图片并在页面显示,图片可删除,具体内容如下 demo例子: 依赖文件: HTML文本内容: 相关照片 JS文本内容: /** * 从 file 域获取 本地图片 url */ fun ...

  3. vue中使用axios post上传头像/图片并实时显示到页面

    前端开发中,为了更好的用户体验,在头像上传时会先将图片显示到页面然后点击保存按钮 完成图片的上传成功 代码部分有参考他人的写法. html代码: <div id="myPhoto&qu ...

  4. vue启动成功,无法访问localhost:8080,以及用ip进行访问———无法显示此页面

    vue启动成功,无法访问localhost:8080,以及用ip进行访问---无法显示此页面 1. 最近在进行vue环境搭建的时候遇到一个问题困扰了一个多小时一直无法解决,在百度csdn上一直找解决方 ...

  5. vue 按钮 权限控制

    vue 按钮 权限控制 前言 在日常项目中,会碰到需要根据后台接口返回的数据,来判断当前用户的操作权限.必须当有删除权限时,就显示删除按钮.没有这个权限时,就不显示或者删除这个按钮.通过查找资料,通过 ...

  6. blob二进制显示在html,使用Blob获取图片并二进制显示实例页面

    HTML代码: JS代码: var eleAppend = document.getElementById("forAppend"); window.URL = window.UR ...

  7. VUE还没生效,页面闪屏的问题解决办法 v-cloak

    当网络较慢,网页还在加载 Vue.js ,而导致 Vue 来不及渲染,这时页面就会显示出 Vue 源代码.我们可以使用 v-cloak 指令来解决这一问题. html: <div id=&quo ...

  8. axios获取图片显示_vue中使用axios post上传头像/图片并实时显示到页面的方法

    在前端开发中,为了更好的用户体验,在头像上传时会先将图片显示到页面然后点击保存按钮 完成图片的上传成功 代码部分有参考他人的写法. html代码: 请上传图片 js代码: //实时显示该图片在页面 g ...

  9. vue 路由参数变化,页面不刷新,provide /inject 完美解决方案

    此方法使用的是v-if来控制router-view的显示或隐藏,v-if从false变为true时,vue会重新渲染router-view区域,所以当参数变化时,只需让v-if 从true => ...

最新文章

  1. 【PDF收藏】docker k8s文档整理
  2. 一张图一个表——CSS选择器总结
  3. python字典去重合并_Python字典及基本操作(超级详细)
  4. ncnn数据归一化和结果解析
  5. 罗马音平假字复制_罗马音大全可复制汉字app下载
  6. 数值分析原理课程实验——四阶龙格-库塔(Runge-Kutta)方法
  7. php对url转码,如何使用php url中文转码
  8. 大专计算机档案,大专档案自我鉴定(精选5篇)
  9. Access denied for user 'root'@'localhost'. Account is locked
  10. python3注册全局热键
  11. 数据挖掘:概念与技术 第五章-数据立方体技术
  12. 嵌入式Linux--U-Boot(四)MMC命令使用
  13. 使用YOLOv3(Python - Keras)实时检测屏幕画面进行目标检测教程(以检测GTA5游戏画面为例子)
  14. 计算机与音乐教育留学,计算机与儿童创新音乐教育
  15. 什么是编译程序(含翻译程序、解释程序和中间代码的定义介绍)
  16. [附源码]java毕业设计校园拓展活动管理系统
  17. 流媒体的几种播放方式
  18. 依赖外购芯片的日系车全面下跌,依靠自主研发的比亚迪近乎倍增
  19. [开发过程]<c#上位机>[01]体验MAUI跨平台效果
  20. linux轻量级web浏览器,QupZilla 1.8.6 发布,轻量级Web浏览器

热门文章

  1. 树莓派安装开源智能家居系统 Domoticz
  2. java tapestry_Java Web 框架 Tapestry
  3. 打马赛克就安全了吗?GitHub热榜的“AI消除马赛克”,上线三天收获近万star
  4. 2018年北京AQI全年走势图
  5. 如何修改jadx的默认内存
  6. 上海市居住证积分提交材料
  7. java awt生成签名图片消除锯齿化
  8. kindle如何导入azw3格式的电子书
  9. Ratel不进行预测,一段时间后恢复正常
  10. 将手机、平板变成电脑第二屏