首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >多级菜单生成的嵌套路由如何展示页面

多级菜单生成的嵌套路由如何展示页面

作者头像
tianyawhl
发布2020-03-31 09:42:36
发布2020-03-31 09:42:36
2K0
举报
文章被收录于专栏:前端之攻略前端之攻略

菜单数据结构  menuData 

代码语言:javascript
复制
    {"data": [{
              "id": 1,
              "menuName": "一级菜单",
              "path": "/home",
              "icon": "el-icon-setting",
              "component": "Home",
              "childMenu": [{
                "id": 2,
                "menuName": "二级菜单-1",
                "path": "/baseConfig/menuManage",
                "component": "menuManage"
              },{
                "id": 111,
                "menuName": "二级菜单-2",
                "path": "/baseConfig/test/index",
                "component": "index",
                "childMenu": [{
                   "id": 121,
                   "menuName": "三级菜单",
                   "path": "/baseConfig/test/pagetest",
                   "component": "pagetest"
                }]
              }]
            }
          ]
        }

生成嵌套路由数据结构

代码语言:javascript
复制
export const formatRoutes = (menuData) => {   
    let fmRoutes = [];
    menuData.forEach(item => {
        let {
            path,
            component,
            childMenu
        } = item;
        //console.log(children)
        if (childMenu && childMenu instanceof Array) {
            childMenu = formatRoutes(childMenu);
        }
        let fmRouter = {
            path: path,            
            children: childMenu,
            component(resolve) {
                if (component.startsWith("Home")) {
                    require(["../views/" + component + ".vue"], resolve);
                } else {
                    require(["../views" + path + ".vue"], resolve);
                } 
            }            
        };
        fmRoutes.push(fmRouter);
    });    
    return fmRoutes;
}

动态添加路由

代码语言:javascript
复制
let fmRoutes = formatRoutes(menuData);            
router.addRoutes(fmRoutes);

由于不管是二级菜单还是三级菜单都是在  <router-view></router-view> 中渲染

三级菜单是在二级菜单中渲染,但是这个页面不需要二级菜单的内容

这时只需要在二级菜单中

index.vue

代码语言:javascript
复制
<template>
<router-view></router-view>
</template>

ok ,这样就可以了!

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档