菜单数据结构 menuData
{"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"
}]
}]
}
]
}生成嵌套路由数据结构
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;
}动态添加路由
let fmRoutes = formatRoutes(menuData);
router.addRoutes(fmRoutes);由于不管是二级菜单还是三级菜单都是在 <router-view></router-view> 中渲染
三级菜单是在二级菜单中渲染,但是这个页面不需要二级菜单的内容
这时只需要在二级菜单中
index.vue
<template>
<router-view></router-view>
</template>
ok ,这样就可以了!