vue3中在router/index.js中

import { createRouter, createWebHistory } from 'vue-router';
import store from 'store' const userRule = {
path: 'user',
component: () => import('@/views/user/index.vue'),
children: [
{
path: 'list',
name: 'userList',
meta: { title: '用户列表', parents: '用户管理', keepAlive: true },
component: () => import('@/views/user/userList.vue'),
},
{
path: 'list',
name: 'userList',
meta: { title: '用户列表', parents: '用户管理', keepAlive: true },
component: () => import('@/views/user/userList.vue'),
}
]
}
const operationRule = {
path: 'opreation',
component: () => import('views/opreation/index.vue'),
}
const reviewRule = {
path: 'review',
component: () => import('views/review/index.vue'),
}
const addissuanceRule = {
path: 'addissuance',
component: () => import('views/addissuance/index.vue'),
}
const financeRule = {
path: 'finance',
component: () => import('views/finance/index'),
}
const statisticsRule = {
path: 'statistics',
component: () => import('views/statistics/index'),
}
const accountRule = {
path: 'account',
component: () => import('views/account/index'),
};
//映射相应的 权限
const ruleMapping = { //匹配路由名字获得对应组件
'user': userRule,
'review': reviewRule,
'operation': operationRule,
'addissuance': addissuanceRule,
'finance': financeRule,
'statistics': statisticsRule,
'account': accountRule,
}
//基础路由
const routes = [
{
path: "/",
name:'home',
meta:{title:'首页'},
component: () => import('views/Home.vue'),
}, {
path: '/login',
component: () => import('views/Login.vue')
},
{
path: "/:catchAll(.*)", //思路2.界面的控制: 用户手动输入任何不匹配的路由地址,就转到notFound页
component: () => import('views/404.vue')
}
] const router = createRouter({
history: createWebHistory(), //createWebHistory or createWebHashHistory
routes: routes
})
//动态添加路由
export function initDynamicRoutes() {
const currentRoutes = router.options.routes;
//在状态机中获取所有的菜单
const menuList = store.state.user.menuList;
//在状态机里获取登录人的权限
const rights = store.state.user.userInfo.rights; menuList.forEach(item => {
//循环所有的的菜单 通过 authority属性里的权限集合判断是否包含当前权限
if(item.authority.includes(rights)){
const temp = ruleMapping[item.name]; //↑↑匹配路由名字获取对应组件
// currentRoutes[0].children.push(temp);
//在vue2中可以通过router.addRoutes来添加一个数组,但是vue-router 4.0后没有addRoutes知道手动添加,此时可以通过router.push('/user/userlit')来进行跳转,
router.addRoute('home',temp)
}
})
}
let routerFlag = true;
router.beforeEach((to, from, next) => {
document.title = to.meta.title
let userInfo = store.getters['user/users'];
if (!userInfo && to.path != '/login') {
next('/login')
} else {
//通过router.addRoute动态添加的路由刷新页面后就没了,这里可以通过一个标识符routerFlag来判断,刷新后routerFlag为true,我们在手动添加一次就行了然后变成false
if(routerFlag){
initDynamicRoutes();
console.log(routerFlag);
next({path:to.path})
routerFlag = false;
}else{
next();
}
}
}) export default router;

vue2 中动态添加路由

//动态添加路由
export function initDynamicRoutes(){
console.log(router); const currentRoutes = router.options.routes;
const rightList = store.state.rightList; //获取vuex中路由权限数组 rightList.forEach( item => {
item.children.forEach(item =>{
const temp = ruleMapping[item.path]; //↑↑匹配路由名字获取对应组件
temp.meta = item.rights //将二级权限添加到 meta对象中. 思路4:请求&响应的控制就是通过匹配meta中的权限来操作的 currentRoutes[2].children.push(temp); //添加到 /home的childern中作为子路由
})
})
router.addRoutes(currentRoutes);
}

vue 动态路由添加的问题的更多相关文章

  1. Vue 动态路由的实现以及 Springsecurity 按钮级别的权限控制

    思路: 动态路由实现:在导航守卫中判断用户是否有用户信息,通过调用接口,拿到后台根据用户角色生成的菜单树,格式化菜单树结构信息并递归生成层级路由表并使用Vuex保存,通过 router.addRout ...

  2. vue动态路由

    我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件.例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染.能够提供参数的路由即为动态路由第一步:定义组件 c ...

  3. vue——动态路由以及地址传参

    动态路由: 当我们很多个页面或者组件都要被很多次重复利用的时候,我们的路由都指向同一个组件,这时候从不同组件进入一个”共用”的组件,并且还要传参数,渲染不同的数据 这就要用到动态路由跟路由传参了! 1 ...

  4. 18 vue 动态路由传参

    params形式 http://192.168.1.100:8080/#/infoDetailed/231 //定义路由{ path: "/infoDetailed/:newsId" ...

  5. Vue 动态路由传值

    一.动态路由传值 1.配置动态路由: const routes = [ //动态路由路径参数以:开头 { path: '/Content/:aid', component:Content}, ] 2. ...

  6. vue 动态路由 Get传值

    main.js //2.配置路由 注意:名字 const routes = [ { path: '/home', component: Home }, { path: '/news', compone ...

  7. vue动态路由配置,vue路由传参

    动态路由: 当我们很多个页面或者组件都要被很多次重复利用的时候,我们的路由都指向同一个组件,这时候从不同组件进入一个"共用"的组件,并且还要传参数,渲染不同的数据 这就要用到动态路 ...

  8. Vue动态路由 Get传值

    <template> <!-- 所有的内容要被根节点包含起来 --> <div id="home"> 我是首页组件 <ul> < ...

  9. vue动态路由传值以及get传值及编程式导航

    1.动态路由传值 1.配置路由处 { path: '/content/:id', component: Content }, // 动态路由 2.对应页面传值 <router-link :to= ...

  10. vue 动态路由按需加载的三种方式

    在Vue项目中,一般使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hell ...

随机推荐

  1. PS设计非常漂亮酷炫的金色字体效果

    方法/步骤 1.在PS里面新建一个黑色背景 2.在图层上 写上比较粗一点的字. 3.鼠标右击图层,选择混合模式,进行调整. 选择颜色叠加,注意颜色是深黄色. 4.转移到混合模式里面的渐变叠加,渐变的颜 ...

  2. 【解决】Mac无法通过smb连接到windows的共享文件夹

    通过Mac访问windows的共享文件夹也有很多博文都写了,这里不再提. 先按照网上教程,在Windows下允许远程,然后设置文件夹共享出来,再在Mac上通过smb登录,输入用户名和密码窗口总是抖动, ...

  3. fetch,axios简介与语法

    fetch简介&语法 留心:像之前的XMLHttpRequest 但并不真的是,而是代替的 #概念:fetch是ecma组织基于promise开发http api ,用来代替xhr  #语法: ...

  4. GIS空间分析和建模复习重点2

    10.缓冲区和缓冲区分析的概念 (1)缓冲区分析分为 点缓冲区分析:一般是围绕点对象建立一定半径的圆形区域. 线缓冲区分析:沿着线的两侧建立距离为缓冲距的带状区域. 面缓冲区分析:是沿着多边形的边界建 ...

  5. java基础(一)~~内存分析

    1.java内存分析 2.2.面向对象内存分析 Java虚拟机的内存可以分为三个区域:栈(stack).堆(heap).方法区(method area): 2.2.1.栈 栈的特点如下: 1.栈描述的 ...

  6. 解决adb devices无法连接各种模拟器

    经常使用到模拟器的童鞋,如果在使用adb devices命令时,发现出现"List of devices attached",模拟器USB调试都开启的情况下,也没有连接成功.这种情 ...

  7. 在线访问GET/POST及格式化json工具

    http://coolaf.com/在线访问及格式化json工具谷歌浏览器json插件不是很好实现.安装,替代方案

  8. noi 45 金币

    noi 45 金币 1.描述 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天)里,每天收到两枚金币:之后三天(第四.五.六天)里,每天收到三枚金币:之后四天( ...

  9. Hyper-v 安装openwrt

    安装注意事项: 1.只能选一代,网卡可以使用新版2.网卡高级设置,MAC地址欺骗一定要选上,不选外部交换机不能上网.3.防火墙做wan口转发4.防火墙wan口,两个reject改为 accept . ...

  10. fillder弱网测试

    打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多. 二.设置弱网参数:菜单Rules-> ...