Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >vue-element-admin el-admin 无限级路由缓存方案 记录

vue-element-admin el-admin 无限级路由缓存方案 记录

作者头像
余生
发布于 2021-01-13 07:06:04
发布于 2021-01-13 07:06:04
82003
代码可运行
举报
文章被收录于专栏:余生开发余生开发
运行总次数:3
代码可运行

vue-element-admin

前置要点 每页都要有name

1. 修改 src\store\modules\permission.js

1.添加两个方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 生成扁平化机构路由(仅两级结构)
 * @param {允许访问的路由Tree} accessRoutes
 * 路由基本机构:
 * {
 *   name: String,
 *   path: String,
 *   component: Component,
 *   redirect: String,
 *   children: [
 *   ]
 * }
 */
function generateFlatRoutes(accessRoutes) {
  const flatRoutes = []

  for (const item of accessRoutes) {
    let childrenFflatRoutes = []
    if (item.children && item.children.length > 0) {
      childrenFflatRoutes = castToFlatRoute(item.children, '')
    }

    // 一级路由是布局路由,需要处理的只是其子路由数据
    flatRoutes.push({
      name: item.name,
      path: item.path,
      component: item.component,
      redirect: item.redirect,
      children: childrenFflatRoutes
    })
  }

  return flatRoutes
}
/**
 * 将子路由转换为扁平化路由数组(仅一级)
 * @param {待转换的子路由数组} routes
 * @param {父级路由路径} parentPath
 */
function castToFlatRoute(routes, parentPath, flatRoutes = []) {
  for (const item of routes) {
    if (item.children && item.children.length > 0) {
      if (item.redirect && item.redirect !== 'noRedirect') {
        flatRoutes.push({
          name: item.name,
          path: (parentPath + '/' + item.path).substring(1),
          redirect: item.redirect,
          meta: item.meta
        })
      }
      castToFlatRoute(item.children, parentPath + '/' + item.path, flatRoutes)
    } else {
      flatRoutes.push({
        name: item.name,
        path: (parentPath + '/' + item.path).substring(1),
        component: item.component,
        meta: item.meta
      })
    }
  }

  return flatRoutes
}

2.修改actions

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  generateRoutes({ commit }, roles) {
    return new Promise(resolve => {
      // let accessedRoutes
      // if (roles.includes('admin')) {
      //   accessedRoutes = asyncRoutes || []
      // } else {
      //   accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
      // }
      const accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
      // 重点修改  下边
      const flatRoutes = generateFlatRoutes(accessedRoutes)
      commit('SET_ROUTES', accessedRoutes)
      resolve(flatRoutes)
    })
  }

2.src\permission.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
          // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
          const { roles } = await store.dispatch('user/getInfo')

          // generate accessible routes map based on roles
          // 下边修改接参变量命名 与 返回变量名一致 不至于理解混乱
          const flatRoutes = await store.dispatch('permission/generateRoutes', roles)

          // dynamically add accessible routes
          router.addRoutes(flatRoutes)

el-admin 2.5前的版本

1.src\router\index.js

1. 添加两个方法 (同上边vue-element-admin所添加的方法是一样的,只是添加文件不一样)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 生成扁平化机构路由(仅两级结构)
 * @param {允许访问的路由Tree} accessRoutes
 * 路由基本机构:
 * {
 *   name: String,
 *   path: String,
 *   component: Component,
 *   redirect: String,
 *   children: [
 *   ]
 * }
 */
function generateFlatRoutes(accessRoutes) {
  const flatRoutes = []

  for (const item of accessRoutes) {
    let childrenFflatRoutes = []
    if (item.children && item.children.length > 0) {
      childrenFflatRoutes = castToFlatRoute(item.children, '')
    }

    // 一级路由是布局路由,需要处理的只是其子路由数据
    flatRoutes.push({
      name: item.name,
      path: item.path,
      component: item.component,
      redirect: item.redirect,
      children: childrenFflatRoutes
    })
  }

  return flatRoutes
}
/**
 * 将子路由转换为扁平化路由数组(仅一级)
 * @param {待转换的子路由数组} routes
 * @param {父级路由路径} parentPath
 */
function castToFlatRoute(routes, parentPath, flatRoutes = []) {
  for (const item of routes) {
    if (item.children && item.children.length > 0) {
      if (item.redirect && item.redirect !== 'noRedirect') {
        flatRoutes.push({
          name: item.name,
          path: (parentPath + '/' + item.path).substring(1),
          redirect: item.redirect,
          meta: item.meta
        })
      }
      castToFlatRoute(item.children, parentPath + '/' + item.path, flatRoutes)
    } else {
      flatRoutes.push({
        name: item.name,
        path: (parentPath + '/' + item.path).substring(1),
        component: item.component,
        meta: item.meta
      })
    }
  }

  return flatRoutes
}

2.修改loadMenus 方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export const loadMenus = (next, to) => {
  buildMenus().then(res => {
    const asyncRouter = filterAsyncRouter(res)
    const flatRoutes = generateFlatRoutes(asyncRouter)
    asyncRouter.push({ path: '*', redirect: '/404', hidden: true })
    store.dispatch('GenerateRoutes', asyncRouter).then(() => { // 存储路由
      router.addRoutes(flatRoutes) // 动态添加可访问路由表
      next({ ...to, replace: true })
    })
  })
}

以上方法 亲测可用

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
vue-element-admin整合SpringBoot实现动态渲染基于角色的菜单资源踩坑录(前后端整合篇)
这篇文章自己准备了好几个周末,如果不是中间踩了太多的坑的话上上的周末就应该发表了,实在是因为踩坑太多而自己也比较执拗,坚持要写出一篇解决掉遇到的99%以上的Bug,能经得起读者实践验证的项目实战文章,拖到今天才发布。笔者一直坚持文章质量重于数量,内容足够好的文章才会让更多的读者传阅。
用户3587585
2021/09/08
1.2K0
vue-element-admin整合SpringBoot实现动态渲染基于角色的菜单资源踩坑录(前后端整合篇)
Vue 动态添加路由及生成菜单
写后台管理系统,估计有不少人遇过这样的需求:根据后台数据动态添加路由和菜单。 为什么这么做呢?因为不同的用户有不同的权限,能访问的页面是不一样的。 在网上找了好多资料,终于想到了解决办法。
谭光志
2020/09/28
3.7K0
《vue3+ts+element-plus 后台管理系统系列三》之路由侧边栏
本项目侧边栏和路由是绑定在一起的,所以你只有在 @/router/index.js 下面配置对应的路由,侧边栏就能动态的生成了。大大减轻了手动重复编辑侧边栏的工作量。当然这样就需要在配置路由的时候遵循一些约定的规则。
星宇大前端
2021/02/22
4.5K0
《vue3+ts+element-plus 后台管理系统系列三》之路由侧边栏
vue-router+vuex的坑
最近使用vue-h5-template写一个移动端demo,想配合后端搞一个动态路由,于是想起以前使用过的vue-element-admin项目里的动态路由方案,大概思路就是准备两个路由数组,一个是不需要经过角色过滤的constantRoutes,一个是需要根据角色过滤的asyncRoutes,在用户登录的时候根据用户角色来过滤asyncRoutes,并将路由信息存放到vuex中
sgr997
2022/11/10
6280
浅析 vue-router 源码和动态路由权限分配
? 这是第 72 篇不掺水的原创,想要了解更多,请戳上方蓝色字体:政采云前端团队 关注我们吧~ 本文首发于政采云前端团队博客:浅析 vue-router 源码和动态路由权限分配 https://ww
政采云前端团队
2020/10/26
4.6K0
浅析 vue-router 源码和动态路由权限分配
React 系列 - 写出优雅的路由
自前端框架风靡以来,路由一词在前端的热度与日俱增,他是几乎所有前端框架的核心功能点。不同于后端,前端的路由往往需要表达更多的业务功能,例如与菜单耦合、与标题耦合、与“面包屑”耦合等等,因此很少有拆箱即用的完整方案,多多少少得二次加工一下。
捷义
2019/02/18
1K0
初识ABP vNext(4):vue用户登录&菜单权限
几乎所有的系统都绕不开登录功能,那么就从登录开始,完成用户登录以及用户菜单权限控制。
xhznl
2020/08/20
2.2K0
初识ABP vNext(4):vue用户登录&菜单权限
简单粗暴的react路由
我要的是简单粗暴的路由 习惯了 vue-router 路由的用法,再用react-router总感觉挺麻烦的。 那么就自己封装一个吧 1.封装多级路由的情况 ————文件名为routerView.js import React from 'react'; import {Switch, Redirect, Route} from 'dva/router'; export default (props)=>{ return <Switch>{ props.routes.map((item, i
super.x
2019/04/12
8530
简单粗暴的react路由
Vue-Router根据用户权限添加动态路由(侧边栏菜单)
如果你的网页有管理员、普通用户等多种角色类型,不同的角色能看到的页面/菜单应该是不同的,所以不同的用户登录之后应该监听到不同的动态路由和渲染不同的菜单,这个时候就需要用到动态路由。
岳泽以
2022/11/14
5.6K0
Vue-Router根据用户权限添加动态路由(侧边栏菜单)
vue实现动态权限与菜单
相信很多的前端工作者都遇到过路由动态权限的需求,有些小伙伴一时之间也不知道该如何下手
前端小tips
2021/11/30
2.3K0
vue实现动态权限与菜单
Vue3 中如何加载动态菜单?
松哥最近正在录制 TienChin 项目视频~采用 Spring Boot+Vue3 技术栈,里边会涉及到各种好玩的技术,小伙伴们来和松哥一起做一个完成率超 90% 的项目,戳戳戳这里-->TienChin 项目配套视频来啦。 ---- 松哥之前写了两篇文章和大家分享了 TienChin 项目中的菜单数据问题,还没看过的小伙伴请戳这里: Vue 里,多级菜单要如何设计才显得专业? TienChin 项目动态菜单接口分析 这两篇文章主要是和大家说明了后端如何根据当前登录用户,动态生成一个菜单 JSON。 那么
江南一点雨
2022/07/20
2.2K0
Vue3 中如何加载动态菜单?
深入剖析基于数据库菜单列表实现Vue动态路由的高效策略
大家好,我是腾讯云开发者社区的 Front_Yue,本篇文章将解决如何将数据库中菜单信息表转化为Vue路由信息列表。
Front_Yue
2024/04/18
4070
深入剖析基于数据库菜单列表实现Vue动态路由的高效策略
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之登录流程与权限管理
基础部分讲完了,这一章开始就不会再讲那么详细了,因为代码量很多,一点一点写估计要写好久,也没人愿意看,所以只挑重点讲。
十里青山
2023/04/28
4.1K1
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之登录流程与权限管理
Vue+abp增加三级菜单
title: "Vue+abp增加三级菜单" publishDate: 2019-12-26 17:28:38 +0800 date: 2019-12-26 17:28:38 +0800 categories: Vue+abp增加三级菜单 position: problem ---
用户6362579
2019/12/30
1.3K0
React-router配置路由模块化及嵌套路由
在src目录下新建router文件夹创建index.js文件 注意导入路径,@为我项目配置路径,默认指向src目录 import { lazy } from 'react'; // 基于路由进行代码分割 // 经测试可进行路由懒加载 // https://zh-hans.reactjs.org/docs/code-splitting.html#route-based-code-splitting const router = [ { path: "/", c
明知山
2021/06/21
2.6K0
Vue-Element-Admin使用
本篇为Vue-element-admin开源框架的使用,用于使用该框架的一些方法和注意点
摸鱼的G
2024/01/25
5840
Vue-Element-Admin使用
06 . Vue路由简介,原理,实现及嵌套路由,动态路由,编程式导航
基于URL的hash实现(点击菜单的时候改变URL的hash,根据hash的变化控制组件的切换)
iginkgo18
2020/11/24
1.9K0
06 . Vue路由简介,原理,实现及嵌套路由,动态路由,编程式导航
vue-element-admin 后台动态加载菜单
做后台项目,权限验证与安全性是非常重要的,vue-element-admin官方主要介绍了前端控制用户菜单加载显示,以及权限控制。这就带来一些不便,服务端无法(这里可能说的绝对了,起码实现起来不太友好)控制菜单的动态展示,用户权限跟菜单相互关系的绑定。
孤烟
2020/09/27
4.3K0
Vue | vue-router基础
2.页面中router-link to:"/path" (path 要写完整路径)
Java小技巧
2022/05/23
1.5K0
使用ReactHook和context实现登录状态的共享
使用react hook 和应用上下文context进行一个自定义的hook的开发。
我已经洗完澡了
2019/10/14
5.3K0
推荐阅读
相关推荐
vue-element-admin整合SpringBoot实现动态渲染基于角色的菜单资源踩坑录(前后端整合篇)
更多 >
LV.1
这个人很懒,什么都没有留下~
作者相关精选
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验