vue动态路由(权限设置)
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动态路由(权限设置)相关推荐
- vue动态路由权限管理
通常我们在vue项目中都是前端配置好路由的,但在一些项目中我们可能会遇到权限控制,这样我们就涉及到动态路由的设置了. 动态路由设置一般有两种: (1).简单的角色路由设置:比如只涉及到管理员和普通用户 ...
- vue admin 动态路由权限管理
主要思路 通过后端接口返回数据 进行判断 (通过后端实现的权限管理有许多种),在这里 我们主要通过 关键字即匹配前端路由meta.menu值来实现权限管理通常会把路由权限列表存至vux中 箭头所指的便 ...
- element label动态赋值_浅析 vuerouter 源码和动态路由权限分配
背景 上月立过一个 flag,看完 vue-router 的源码,可到后面逐渐发现 vue-router 的源码并不是像很多总结的文章那么容易理解,阅读过你就会发现里面的很多地方都会有多层的函数调用关 ...
- blob没权限 ie_vuerouter 源码和动态路由权限分配
本文首发于政采云前端团队博客:浅析 vue-router 源码和动态路由权限分配https://www.zoo.team/article/vue-router-analysis 背景 上月立过一个 f ...
- vue-router 源码和动态路由权限分配
本文首发于政采云前端团队博客:浅析 vue-router 源码和动态路由权限分配https://www.zoo.team/article/vue-router-analysis 背景 上月立过一个 f ...
- 浅析 vue-router 源码和动态路由权限分配
背景 上月立过一个 flag,看完 vue-router 的源码,可到后面逐渐发现 vue-router 的源码并不是像很多总结的文章那么容易理解,阅读过你就会发现里面的很多地方都会有多层的函数调用关 ...
- ant design pro vue 动态路由 流程详解
ant design pro vue 动态路由 流程详解 前言 流程图 流程1 src/permission.js 流程2 src/store/modules/user.js 流程3 src/perm ...
- Vue动态路由的前端实现
1. 需求描述 最近开发的一个项目,涉及到这样一个需求:随着项目的不断推进,后台管理功能逐渐增多,与此同时,静态路由表也逐渐扩大,需要把静态路由方式转换为动态路由方式.要完成这样一个转换,有几个技术要 ...
- Ant Design Pro 登录流程以及路由权限设置
登录流程: 1.ant 框架最外层套了 SecurityLayout 布局 SecurityLayout 中判断用户是否登录,做自动跳转路由处理. 里面的 currentUser 和 currentU ...
- Vue动态路由传参和监听路由
Vue动态路由传参 query传参 params传参 //定义Detail路由 {path: '/detail/:id',name: 'Detail'component: () => impor ...
最新文章
- rar for linux缺少GLIBC_2.7
- 独家 | 2018年Analytics Vidhya上最受欢迎的15篇数据科学和机器学习文章
- linux 负数_linux内核提权系列教程(2):任意地址读写到提权的4种方法
- 渗透脚本快速生成工具Intersect
- 5G NGC — UDM 统一数据管理
- Windows10安装配置ChromeDriver
- 深度复盘 | 滴滴专车会员项目如何做好设计优化
- mysql lbs 计算距离_使用mysql的lbs根据经纬度计算距离
- 操作系统 第五章【虚拟存储器】【MOOC答案】
- 每次登陆都要滑动验证_湖人队冠军成员卡鲁索很吃香:每次谈判都有N支球队点名要他...
- solr返回的字段带有中括号问题
- Linux下samba服务搭建
- CSS3属性——“box-flex”
- LFW database
- 中文车牌识别开源项目C++版使用笔记
- matlab freqz-m,Matlab函数freqs和freqz
- PS学习总结三:修图必备的高阶操作
- App(iOS Android)开发时简单的用户反馈实现
- Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.5 - 图生成 / 随机图
- H5的APP逆向方法
热门文章
- 日本所得税和住民税的计算方法
- 计算机毕业设计之[含论文+开题+任务书+中期检查+源码等]S2SH+mysql音乐网站[包运行成功]
- python k线顶分型_K线战法之『顶底分型』高手懂的!
- 在农村创业有哪些优势和机会?
- 论文笔记OHEM(Online Hard Example Mining)
- 维天运通上市破发:公司市值40亿港元 蚂蚁集团是股东
- 学生管理系统之简化学生版(练习版)
- 【Python画图】matplotlib画折线图plt.plot、柱状图plt.bar、堆叠柱状图、饼图plt.pie以及自定义坐标轴的位置、显示汉字
- 小程序选项卡以及swiper套用(跨页面)
- Logger 日志管理