当前位置: 移动技术网 > IT编程>开发语言>Java > vue+springboot动态路由的实现

vue+springboot动态路由的实现

2020年07月17日  | 移动技术网IT编程  | 我要评论

一.后台处理

1.后台资源表
在这里插入图片描述2.封装成json格式
1.vo
在这里插入图片描述在这里插入图片描述
2.把数据封装为嵌套格式,把查找到资源进行转换。

@UtilityClass
public class MenuUtil {
    public List<DynamicMenuVO> generateMenu(List<DynamicMenuVO> resourceList){
        List<DynamicMenuVO> menuList=new ArrayList<>();
        for (DynamicMenuVO childrenDynamicMenu:resourceList){
            //只要不是顶级目录都要寻找其父目录
            if(childrenDynamicMenu.getParentMenuId()!=0){
                //把其添加到其父目录里
                for (DynamicMenuVO parentDynamicMenu:resourceList){
                    //找到其父级目录
                    if(childrenDynamicMenu.getParentMenuId()==parentDynamicMenu.getId()){
                        List<DynamicMenuVO> children = parentDynamicMenu.getChildren();
                        if(children==null){
                            children=new ArrayList<DynamicMenuVO>();
                        }
                        children.add(childrenDynamicMenu);
                        parentDynamicMenu.setChildren(children);
                    }
                }
            }
        }
        //只返回父级菜单即可
        for (DynamicMenuVO dynamicMenuVO:resourceList){
            if(dynamicMenuVO.getParentMenuId()==0){
                menuList.add(dynamicMenuVO);
            }
        }
        return menuList;
    }
}

3.转换后返回的json格式在这里插入图片描述

二.前端处理

1.登录时存储路由
在这里插入图片描述
2.生成菜单工具类

const _import = require('../router/_import_development' ) //获取组件的方法
import Layout from '@/layout' //Layout 是架构组件,不在后台返回,在文件里单独引入
import router from '../router'

export function generateMenu(data){
  var getRouter = filterAsyncRouter(data) //过滤路由
  console.log(getRouter)
  router.addRoutes(getRouter) //动态添加路由
  global.antRouter = getRouter //将路由数据传递给全局变量,做侧边栏菜单渲染工作
}
function filterAsyncRouter(asyncRouterMap) { //遍历后台传来的路由字符串,转换为组件对象
  const accessedRouters = asyncRouterMap.filter(route => {
    if (route.component) {
      if (route.component === 'Layout') { //Layout组件特殊处理
        route.component = Layout
      } else {
        route.component = _import(route.component)
      }
    }
    if (route.children && route.children.length) {
      route.children = filterAsyncRouter(route.children)
    }
    return true
  })

  return accessedRouters
}
}

_import_development.js
在这里插入图片描述
3.登陆后跳转第一个路由
在这里插入图片描述4.在layout的sidebar中修改菜单生成方式
在这里插入图片描述
5.由于路由是存在global.runter中 所以需要每次更新,在permission.js中设置
在这里插入图片描述至此动态路由已经实现。

本文地址:https://blog.csdn.net/qq_36185997/article/details/107359621

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网