• 宣传官网 xb.exrick.cn
  • 在线Demo xboot.exrick.cn
  • 开源版Github地址 github.com/Exrick/x-bo…
  • 开发文档 www.kancloud.cn/exrick/xboo…
  • 获取完整版 xpay.exrick.cn/pay?xboot

路由分为两种:一种存储在本地文件中,大部分为固定的页面功能菜单;另一种为根据用户角色动态加载的菜单包含相应按钮权限信息。

  • 固定路由菜单在文件src/router/router.js
  • 动态路由加载方法主要在文件src/libs/util.js中,主要通过router.addRoutes(routes)实现路由动态添加
util.initRouter = function (vm) {const constRoutes = [];const otherRoutes = [];// 404路由需要和动态路由一起加载const otherRouter = [{path: '/*',name: 'error-404',meta: {title: '404-页面不存在'},component: 'error-page/404'}];// 判断用户是否登录let userInfo = Cookies.get('userInfo')if (userInfo == null || userInfo == "" || userInfo == undefined) {// 未登录return;}let accessToken = window.localStorage.getItem('accessToken')// 加载菜单axios.get(getMenuList, { headers: { 'accessToken': accessToken } }).then(res => {let menuData = res.result;if (menuData == null || menuData == "" || menuData == undefined) {return;}// 顶部菜单let navList = [];menuData.forEach(e => {let nav = {name: e.name,title: e.title,icon: e.icon}navList.push(nav);})if (navList.length < 1) {return;}// 存入vuexvm.$store.commit('setNavList', navList);let currNav = window.localStorage.getItem('currNav')if (currNav) {// 读取缓存titlefor (var item of navList) {if (item.name == currNav) {vm.$store.commit('setCurrNavTitle', item.title);break;}}} else {// 默认第一个currNav = navList[0].name;vm.$store.commit('setCurrNavTitle', navList[0].title);}vm.$store.commit('setCurrNav', currNav);for (var item of menuData) {if (item.name == currNav) {// 过滤menuData = item.children;break;}}util.initRouterNode(constRoutes, menuData);util.initRouterNode(otherRoutes, otherRouter);// 添加主界面路由vm.$store.commit('updateAppRouter', constRoutes.filter(item => item.children.length > 0));// 添加全局路由vm.$store.commit('updateDefaultRouter', otherRoutes);// 刷新界面菜单vm.$store.commit('updateMenulist', constRoutes.filter(item => item.children.length > 0));let tagsList = [];vm.$store.state.app.routers.map((item) => {if (item.children.length <= 1) {tagsList.push(item.children[0]);} else {tagsList.push(...item.children);}});vm.$store.commit('setTagsList', tagsList);});
};// 生成路由节点
util.initRouterNode = function (routers, data) {for (var item of data) {let menu = Object.assign({}, item);// menu.component = import(`@/views/${menu.component}.vue`);menu.component = lazyLoading(menu.component);if (item.children && item.children.length > 0) {menu.children = [];util.initRouterNode(menu.children, item.children);}let meta = {};// 给页面添加权限、标题、第三方网页链接meta.permTypes = menu.permTypes ? menu.permTypes : null;meta.title = menu.title ? menu.title + " - XBoot前后端分离开发平台 By: Exrick" : null;meta.url = menu.url ? menu.url : null;menu.meta = meta;routers.push(menu);}
};
复制代码

注意:404路由需要和动态路由一起加载,避免直接访问动态路由路径链接进入页面时,动态路由还未加载导致先跳转到404错误页

  • 加载组件src/libs/lazyLoading.js
export  default (url) \=>()\=>import(`@/views/${url}.vue`)
复制代码
  • 存入Vuex
// 动态添加主界面路由,需要缓存
updateAppRouter(state, routes) {state.routers.push(...routes);router.addRoutes(routes);
},
// 动态添加全局路由404、500等页面,不需要缓存
updateDefaultRouter(state, routes) {router.addRoutes(routes);
}
updateMenulist(state, routes) {state.menuList  =  routes;
},
复制代码
  • src/main.js中进行调用
new Vue({el: '#app',render: h => h(App),mounted() {// 初始化菜单util.initRouter(this);}
})
复制代码

转载于:https://juejin.im/post/5cc1438f5188252d6c43fc79

Vue iView Admin 动态路由菜单加载 前后端分离(springboot 2.x iview admin vue 前后端分离 模型设计器 动态数据权限...相关推荐

  1. Vue Router系列之路由懒加载

    文章の目录 一.具体需要 3 步: 1.安装 `@babel/plugin-syntax-dynamic-import` 包. 2.在 babel.config.js 配置文件中声明该插件. 3.将路 ...

  2. 手摸手教你vite + vue3 + tsx 项目打包后动态路由无法加载页面问题

    今天在部署项目到服务器后,发现动态路由失效,测试开发环境时路由都可以正常跳转,生产环境控制台报错: 原代码如下: 查看了官方文档,并没有找到合适的方案,后百度查看了一些解决方案,但都没有解决实际问题, ...

  3. 终端初始化vue项目报错提示 无法加载文件 C:\Users\hp\AppDate\Roaming\npm\vue.ps1。

    在学习的路上真的是随处可见"拦路虎",在学各种框架的路上也是. 今天没有用命令行窗口的方式新建vue项目,而是直接在vscode终端执行 vue init webpack 命令,然 ...

  4. vue 如何处理两个组件异步问题_Vue异步组件处理路由组件加载状态的解决方案...

    vue.js 组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 在大型单页面应用中,处于对性能的考虑和首屏加载速度的要求,我们一般 ...

  5. Vue 路由懒加载

    路由和组件的常用两种懒加载方式: 1.vue异步组件实现路由懒加载 component:resolve=>(['需要加载的路由的地址',resolve]) 2.es提出的import(推荐使用这 ...

  6. Vue根据菜单json数据动态按需加载路由Vue-router

    每个菜单项对应一个页面组件,根据菜单项动态按需加载路由 路由配置的正确写法: /*router/index.js*/ import Vue from 'vue' import Router from ...

  7. Vue 路由懒加载和动态加载

    什么是路由懒加载? 不同组件有不同的 js 文件,当访问相应组件的时候才会加载其相应的js文件,而不是在首页统一加载,这样就优化了首页渲染的时间,提高页面首次渲染时间: 路由懒加载的原理? 底层是一个 ...

  8. vue动态路由和路由懒加载

    目录 1.动态路由 1.配置router 2.使用路由 3.创造用户组件并使用传进来的用户信息 2.路由懒加载 1.懒加载的方式 2.懒加载举例 1.动态路由(通过$route.params获得数据) ...

  9. vue中的路由懒加载

    文章目录 路由懒加载 vue异步组件 ES import 常用 路由懒加载 懒加载本质是延迟加载或按需加载,即在需要的时候的时候进行加载. 首页不用设置懒加载,一个页面加载过后再次访问不会重复加载. ...

最新文章

  1. JavaScript 编程精解 中文第三版 十一、异步编程
  2. 关于省,市,区联动 java 实现方式
  3. unity3d显示c4d材质_C4D小白最常踩的9个坑,看看你中招了没?
  4. oracle update 数据库恢复,ORACLE update 操作内部原理
  5. 快速入门Pytorch(1)--安装、张量以及梯度
  6. 【原】webpack--loaders,主要解释为什么需要loaders和注意事项
  7. 4万次下载,我的这本电子书连续数月蝉联阿里云下载榜冠军!!!
  8. 察看网页源代码全攻略
  9. OpenShift 4 - 用CA证书或Token访问Internal Registry中的容器
  10. expect实现配置机器信任关系
  11. android webdav 播放器,Android WebDAV
  12. 【新发现】不用苹果开发账号就能申请ios证书真机调试
  13. linux光纤盘刷新,Linux 在shell终端中清空DNS缓存,刷新DNS的方法(ubuntu,debian)
  14. 解决idea导入项目中文乱码intellij
  15. 【ECU】汽车电子/嵌入式工程师学习网站、资源、路线
  16. 2020年12月-第02阶段-前端基础-CSS Day07
  17. 《编码隐藏在计算机软硬件背后的语言》读感
  18. ThinkPad E460如何进入bios
  19. 护眼的VS2019黑色主题!把 Visual Studio 2019 主题设置为 JetBrains Darcula 主题,类似 Pycharm, CLion, IntelliJ IDEA
  20. input框禁止输入的四种方式

热门文章

  1. shell实例第14讲:字符串截取的8种方法
  2. 枚举类型enum需要注意的6点!
  3. STM8中GPIO的12种模式
  4. mybaits八:select查询返回map集合
  5. mybaits一:初步认识mybatis
  6. java1.8之supplier
  7. iOS组件化(二):创建远程私有库
  8. 解决jmeter响应中文乱码及解码
  9. Oracle的一些经典SQL面试题
  10. ruby 作为嵌入脚本时使用的注意事项