1.思路

(1)动态添加路由肯定用的是addRouter,在哪用?

(2)vuex当中获取到菜单,怎样展示到界面

2.不管其他先试一下addRouter

找到router/index.js文件,内容如下,这是我自己先配置的登录路由

现在先不管请求到的菜单是什么样,先写一个固定的菜单通过addRouter添加
添加以前注意:addRoutes()添加的是数组
export defult router的上一行图中17行写下以下代码

var addRoute=[{path:"/",name:"home",component:()=>import("@/pages/home")}
]
router.addRoutes(addRoute)

在网页当中手动进入home页面,输入网址:localhost:8080
发现没有问题,那么请求到的数据就按照这个格式来

3.登录成功后添加路由

(1)登录

单独的login组件,使用vuex
login组件当中通过this.$store.dispatch("login")调用vuex当中action里面的异步方法进行登录操作,请求数据返回的路由如下:

可以看到返回路由,保存在sessionStorage当中
vuex文件如下

这里sessionStorage存数组要注意存是需要转换JSON.stringify()方法,取值时也需要通过JSON.parse()转换两次转换才能正常使用
需要复制代码的话如下:

import {login
} from '@/api/index';
import setMenu from '../../router/router'
export let loginStore = {state: {menuList: JSON.parse(sessionStorage.getItem("menu"))||[],},getters: {getState(state) {console.log("sss", state.menuList)return state.menuList}},mutations: {GET_MENU(state, payload) {sessionStorage.setItem("menu", JSON.stringify(payload))state.menuList = payload}},actions: {login({commit}, data) {login(data).then(res => {if (res.data.code == "0") {sessionStorage.setItem("username", data.username)commit("GET_MENU", res.data.oneelevel)setMenu()}})}},
}

将该文件放进store下的index文件当中

import Vue from 'vue'
import Vuex from 'vuex'
import { loginStore } from "./modules/login"
Vue.use(Vuex)export default new Vuex.Store({modules: {loginStore}
})

在router文件下创建router.js文件

import router from '.'
import store from '../store'
export default function setMenu(){if (store.state.loginStore.menuList.length > 0) {var arr = []const path = "pages/home"store.state.loginStore.menuList.forEach(item => {var result = []item.children.forEach((ele, index) => {result.push({path: ele.path,title: ele.name,name: ele.path.split("/")[1],component: (resolve) => require([`@/${ele.url}`], resolve)})})arr.push({path: item.path,title: item.name,name: item.path.split("/")[1],component: (resolve) => require([`@/${item.url}`], resolve),children: result})})router.options.routes.push({path: "/",name: "home",component: (resolve) => require([`@/${path}`], resolve),children: arr})router.addRoutes(router.options.routes)}
}

操作数据,添加路由需要的参数(path、name,以及引入)抛出setMenu方法,在vuex当中有调用
引入文件的不同
router下的index文件当中试了addRoutes没有问题,但请求到数据后就不能用这种方式引入了,这里用到了require方法
require()方法不能直接引变量,意思就是

reuire([`${item.path}`])      //报错,即使item.pah包含了“@/”也不行
require([`@/+${item.path}`])  //正确

这个方法的目的是将请求到的菜单通过遍历,变为

arr=[{path:'',name:'',component:(resolve)=>require([`@/${....路径}`])}
]

因为请求到的菜单和我的肯定不同,这个方法可以自己定义,自己写,只要转换成想要的格式即可
在home组件当中展示菜单栏
通过v-for遍历就可以了,二级路由的话v-for嵌套

<el-row class="tac"><el-col :span="12"><el-menudefault-active="1"class="el-menu-vertical-demo"@open="handleOpen"@close="handleClose"background-color="#545c64"text-color="#fff"active-text-color="#ffd04b"><el-submenuv-for="(item,index) in menu":key="index":index="String(index)"><template slot="title"><router-link :to="item.path">{{$t('message.'+item.name)}}</router-link></template><el-menu-itemv-for="(itm,idx) in item.children":key="idx":index="String(index)+'-'+String(idx)"><router-link :to="itm.path">{{$t('message.'+itm.name)}}</router-link></el-menu-item></el-submenu></el-menu></el-col></el-row>

menu通过sessionstorage获取

这里基本上就完成了。(基本上。。。)
回到页面最开始,
打开F12先将Application当中的sessionstorage删除,
回到登录界面,登录成功,显示处菜单,但是刷新就白屏了

在app文件下created当中调用setMenu()方法完美解决。
再刷新就不会白屏了

vue动态路由(权限设置)相关推荐

  1. vue动态路由权限管理

    通常我们在vue项目中都是前端配置好路由的,但在一些项目中我们可能会遇到权限控制,这样我们就涉及到动态路由的设置了. 动态路由设置一般有两种: (1).简单的角色路由设置:比如只涉及到管理员和普通用户 ...

  2. vue admin 动态路由权限管理

    主要思路 通过后端接口返回数据 进行判断 (通过后端实现的权限管理有许多种),在这里 我们主要通过 关键字即匹配前端路由meta.menu值来实现权限管理通常会把路由权限列表存至vux中 箭头所指的便 ...

  3. element label动态赋值_浅析 vuerouter 源码和动态路由权限分配

    背景 上月立过一个 flag,看完 vue-router 的源码,可到后面逐渐发现 vue-router 的源码并不是像很多总结的文章那么容易理解,阅读过你就会发现里面的很多地方都会有多层的函数调用关 ...

  4. blob没权限 ie_vuerouter 源码和动态路由权限分配

    本文首发于政采云前端团队博客:浅析 vue-router 源码和动态路由权限分配https://www.zoo.team/article/vue-router-analysis 背景 上月立过一个 f ...

  5. vue-router 源码和动态路由权限分配

    本文首发于政采云前端团队博客:浅析 vue-router 源码和动态路由权限分配https://www.zoo.team/article/vue-router-analysis 背景 上月立过一个 f ...

  6. 浅析 vue-router 源码和动态路由权限分配

    背景 上月立过一个 flag,看完 vue-router 的源码,可到后面逐渐发现 vue-router 的源码并不是像很多总结的文章那么容易理解,阅读过你就会发现里面的很多地方都会有多层的函数调用关 ...

  7. ant design pro vue 动态路由 流程详解

    ant design pro vue 动态路由 流程详解 前言 流程图 流程1 src/permission.js 流程2 src/store/modules/user.js 流程3 src/perm ...

  8. Vue动态路由的前端实现

    1. 需求描述 最近开发的一个项目,涉及到这样一个需求:随着项目的不断推进,后台管理功能逐渐增多,与此同时,静态路由表也逐渐扩大,需要把静态路由方式转换为动态路由方式.要完成这样一个转换,有几个技术要 ...

  9. Ant Design Pro 登录流程以及路由权限设置

    登录流程: 1.ant 框架最外层套了 SecurityLayout 布局 SecurityLayout 中判断用户是否登录,做自动跳转路由处理. 里面的 currentUser 和 currentU ...

  10. Vue动态路由传参和监听路由

    Vue动态路由传参 query传参 params传参 //定义Detail路由 {path: '/detail/:id',name: 'Detail'component: () => impor ...

最新文章

  1. rar for linux缺少GLIBC_2.7
  2. 独家 | 2018年Analytics Vidhya上最受欢迎的15篇数据科学和机器学习文章
  3. linux 负数_linux内核提权系列教程(2):任意地址读写到提权的4种方法
  4. 渗透脚本快速生成工具Intersect
  5. 5G NGC — UDM 统一数据管理
  6. Windows10安装配置ChromeDriver
  7. 深度复盘 | 滴滴专车会员项目如何做好设计优化
  8. mysql lbs 计算距离_使用mysql的lbs根据经纬度计算距离
  9. 操作系统 第五章【虚拟存储器】【MOOC答案】
  10. 每次登陆都要滑动验证_湖人队冠军成员卡鲁索很吃香:每次谈判都有N支球队点名要他...
  11. solr返回的字段带有中括号问题
  12. Linux下samba服务搭建
  13. CSS3属性——“box-flex”
  14. LFW database
  15. 中文车牌识别开源项目C++版使用笔记
  16. matlab freqz-m,Matlab函数freqs和freqz
  17. PS学习总结三:修图必备的高阶操作
  18. App(iOS Android)开发时简单的用户反馈实现
  19. Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.5 - 图生成 / 随机图
  20. H5的APP逆向方法

热门文章

  1. 日本所得税和住民税的计算方法
  2. 计算机毕业设计之[含论文+开题+任务书+中期检查+源码等]S2SH+mysql音乐网站[包运行成功]
  3. python k线顶分型_K线战法之『顶底分型』高手懂的!
  4. 在农村创业有哪些优势和机会?
  5. 论文笔记OHEM(Online Hard Example Mining)
  6. 维天运通上市破发:公司市值40亿港元 蚂蚁集团是股东
  7. 学生管理系统之简化学生版(练习版)
  8. 【Python画图】matplotlib画折线图plt.plot、柱状图plt.bar、堆叠柱状图、饼图plt.pie以及自定义坐标轴的位置、显示汉字
  9. 小程序选项卡以及swiper套用(跨页面)
  10. Logger 日志管理