創建動態路由下如何賦值默認參數?
- 從度娘得知,配置動態路由的文章有很多,但是找了很多沒有找到適合自己的;基於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 }
- 文章中的重點部分,我已經用紅色代碼標注出來的,文章整體不太適用於粘貼黨,粘貼黨需要根據自己的業務進行修改。
- 以上只是一種方式,還有其他的更好方式,請在評論處留下地址,方便我們共同成長。