Vue | Router 基于Element-admin动态路由菜单下默认参数
创建动态路由下如何赋值默认参数?
- 从度娘得知,配置动态路由的文章有很多,但是找了很多没有找到适合自己的;基于Element-admin配置动态路由,
- 但是需要从后台配置默认的参数;如下
- 下面直接贴代码说明:
我的系统的动态路由都在permission.js拼接完成的,具体依赖
import router from './router'
根据具体业务使用 router.addRoutes 添加动态的路由,具体的代码我相信这样的文章很完善了
- 下面就是本文的重点部分,如何配置路由中的参数默认值
- 我们都知道拼接路由少不了 path、component 、redirect 、meta 等等属性。
- 下面上代码,注意代码红色的部分,本文这里利用vue解析props这个方法的时候,将route中的query的进行赋值操作,获取的时候就可以根据 this.$route.query.属性名 自行获取了。
1 function generateRouteStrucChildren(asyncRouterMap, menusChildren) { 2 for (const menu of menusChildren) { 3 const permission = {} 4 permission.path = getRouteName(menu.MODULE_ROUTE) 5 permission.hidden = !Number(menu.MENU_PROP) 6 if (menu.children.length) { 7 permission.component = LayoutNull 8 permission.redirect = 'noredirect' 9 } 10 else { 11 permission.component = _import(menu.MODULE_URL + menu.MODULE_OBJ) 12 } 13 // permission.redirect = 'noredirect' 14 permission.name = getRouteName(menu.MODULE_ROUTE) 15 permission.props = route => { 16 getParamters(menu.MODULE_ROUTE, route) 17 } 18 permission.meta = { title: menu.MENU_NAME, icon: menu.MENU_ICON, roles: [], param: getParamters(menu.MODULE_ROUTE) } 19 permission.children = [] 20 if (menu.children.length) { 21 // const childMenu = generateRouteStrucChildren(permission.children, menu.children) 22 // permission.children.push(childMenu) 23 generateRouteStrucChildren(permission.children, menu.children) 24 } 25 if (menu.MODULE_ROUTE.indexOf('FundPlanFiles') !== -1) { 26 console.log(permission) 27 } 28 asyncRouterMap.push(permission) 29 } 30 } 31 32 function getRouteName(router) { 33 if (router && router.indexOf('?') !== -1) { 34 return router.split('?')[0] 35 } 36 return router 37 } 38 39 /* 40 实现对拼接到路由的参数进行解析,并添加到动态路由 41 realize the analysis of the parameters spliced to the route and add them to the dynamic route 42 */ 43 function getParamters(urlStr, route) { 44 var Params = {} 45 var vars = urlStr.split('&') 46 for (var i = 0; i < vars.length; i++) { 47 var pair = vars[i].split('=') 48 if (pair && pair.length === 2) { 49 var propertyName = pair[0].split('?') 50 if (propertyName && propertyName.length > 1) { 51 Params[propertyName[1]] = pair[1] 52 if (route) { 53 route.query[propertyName[1]] = pair[1] 54 } 55 } 56 } 57 } 58 return Params 59 }
- 文章中的重点部分,我已经用红色代码标注出来的,文章整体不太适用于粘贴党,粘贴党需要根据自己的业务进行修改。
- 以上只是一种方式,还有其他的更好方式,请在评论处留下地址,方便我们共同成长。