路由和菜單

路由和菜單是組織起一個(gè)應(yīng)用的關(guān)鍵骨架慨畸,為了方便管理滨达,使用了中心化的方式,在 router.config.js統(tǒng)一配置和管理赡盘。

基本結(jié)構(gòu)

在這一部分,腳手架通過結(jié)合一些配置文件缰揪、基本算法及工具函數(shù)陨享,搭建好了路由和菜單的基本框架,主要涉及以下幾個(gè)模塊/功能:

  • 路由管理 通過約定的語法根據(jù)在 router.config.js 中配置路由钝腺。
  • 菜單生成 根據(jù)路由配置來生成菜單抛姑。菜單項(xiàng)名稱,嵌套路徑與路由高度耦合艳狐。
  • 面包屑 組件 PageHeader 中內(nèi)置的面包屑也可由腳手架提供的配置信息自動(dòng)生成定硝。

下面簡(jiǎn)單介紹下各個(gè)模塊的基本思路

路由

目前腳手架中所有的路由都通過 router.config.js來統(tǒng)一管理,在 vue-router 的配置中我們?cè)黾恿艘恍﹨?shù)毫目,如 hideChildrenInMenu,meta.title,meta.icon,meta.permission蔬啡,來輔助生成菜單诲侮。其中:

  • hideChildrenInMenu 用于隱藏不需要在菜單中展示的子路由。用法可以查看 分步表單 的配置箱蟆。
  • hidden 可以在菜單中不展示這個(gè)路由沟绪,包括子路由。效果可以查看 other 下的路由配置空猜。
  • meta.titlemeta.icon分別代表生成菜單項(xiàng)的文本和圖標(biāo)绽慈。
  • meta.permission 用來配置這個(gè)路由的權(quán)限,如果配置了將會(huì)驗(yàn)證當(dāng)前用戶的權(quán)限辈毯,并決定是否展示 *(默認(rèn)情況下)坝疼。
  • meta.hidden 可以強(qiáng)制子菜單不顯示在菜單上(和父級(jí) hideChildrenInMenu 配合)
  • meta.hiddenHeaderContent 可以強(qiáng)制當(dāng)前頁面不顯示 PageHeader 組件中的頁面帶的 面包屑和頁面標(biāo)題欄

菜單

菜單根據(jù) router.config.js生成,具體邏輯在 src/store/modules/permission.js 中的 actions.GenerateRoutes 方法實(shí)現(xiàn)漓摩。

需求實(shí)例

上面對(duì)這部分的實(shí)現(xiàn)概要進(jìn)行了介紹裙士,接下來通過實(shí)際的案例來說明具體該怎么做。

菜單跳轉(zhuǎn)到外部地址

你可以直接將完整 url 填入 path 中管毙,框架會(huì)自動(dòng)處理腿椎。

{
    path: 'https://www.baidu.com',
    name: 'docs',
    meta: {
        title: '文檔', 
        target: '_blank' // 打開到新窗口
   }
}

加好后,會(huì)默認(rèn)生成相關(guān)的路由及導(dǎo)航夭咬。

新增布局

在腳手架中我們通過嵌套路由來實(shí)現(xiàn)布局模板啃炸。router.config.js 是一個(gè)數(shù)組,其中第一級(jí)數(shù)據(jù)就是我們的布局卓舵,如果你需要新增布局可以再直接增加一個(gè)新的一級(jí)數(shù)據(jù)南用。

{
    path: '/new-router',
    name: 'newRouter',
    redirect: '/new-router/ahaha',
    component: RouteView,
    meta: { title: '儀表盤', keepAlive: true, permission: [ 'dashboard' ] },
    children: [
    {
        path: '/new-router/ahaha',
        name: 'ahaha',
        component: () => import('@/views/dashboard/Analysis'),
        meta: { title: '分析頁', keepAlive: false, permission: [ 'ahaha' ] }
    }
}

路由配置項(xiàng) E.g:

/**
 * 路由配置說明:
 * 建議:sider menu 請(qǐng)不要超過三級(jí)菜單,若超過三級(jí)菜單掏湾,則應(yīng)該設(shè)計(jì)為頂部主菜單 配合左側(cè)次級(jí)菜單
 *
 **/
 {
  redirect: noredirect,
  name: 'router-name',
  hidden: true,
  meta: {
    title: 'title',
    icon: 'a-icon',
    keepAlive: true,
    hiddenHeaderContent: true,
  }
}

API

{ Route } 對(duì)象

參數(shù) 說明 類型 默認(rèn)值
hidden 控制路由是否顯示在 sidebar boolean false
redirect 重定向地址, 訪問這個(gè)路由時(shí),自定進(jìn)行重定向 string -
name 路由名稱, 必須設(shè)置,且不能重名 string -
meta 路由元信息(路由附帶擴(kuò)展信息) object {}
hideChildrenInMenu 強(qiáng)制菜單顯示為Item而不是SubItem(配合 meta.hidden) boolean -

{ Meta } 路由元信息對(duì)象

參數(shù) 說明 類型 默認(rèn)值
title 路由標(biāo)題, 用于顯示面包屑, 頁面標(biāo)題 *推薦設(shè)置 string -
icon 路由在 menu 上顯示的圖標(biāo) [string,svg] -
keepAlive 緩存該路由 boolean false
hidden 用于隱藏菜單時(shí)裹虫,提供遞歸到父菜單顯示 選中菜單項(xiàng)(可參考 個(gè)人頁 配置方式) boolean false
hiddenHeaderContent *特殊 隱藏 PageHeader 組件中的頁面帶的 面包屑和頁面標(biāo)題欄 boolean false
permission 與項(xiàng)目提供的權(quán)限攔截匹配的權(quán)限,如果不匹配融击,則會(huì)被禁止訪問該路由頁面 array []

路由自定義 Icon 請(qǐng)引入自定義 svg Icon 文件筑公,然后傳遞給路由的 meta.icon 參數(shù)即可

請(qǐng)注意 component: () => import('..') 方式引入路由的頁面組件為 懶加載模式。具體可以看 Vue 官方文檔
增加新的路由應(yīng)該增加在 ‘/‘ (index) 路由的 children 內(nèi)
無需控制權(quán)限的路由或者需要在未登錄情況訪問的路由尊浪,可以定義在 /src/config/router.config.js 下的 constantRouterMap 屬性中
permission 可以進(jìn)行自定義修改匣屡,只需要對(duì)這個(gè)模塊進(jìn)行自定義修改即可 src/store/modules/permission.js

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拇涤,隨后出現(xiàn)的幾起案子捣作,更是在濱河造成了極大的恐慌,老刑警劉巖鹅士,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件券躁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘱朽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門旭贬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搪泳,你說我怎么就攤上這事《笃辏” “怎么了岸军?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瓦侮。 經(jīng)常有香客問我艰赞,道長(zhǎng),這世上最難降的妖魔是什么肚吏? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任方妖,我火速辦了婚禮,結(jié)果婚禮上罚攀,老公的妹妹穿的比我還像新娘党觅。我一直安慰自己,他們只是感情好斋泄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布杯瞻。 她就那樣靜靜地躺著,像睡著了一般炫掐。 火紅的嫁衣襯著肌膚如雪魁莉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天募胃,我揣著相機(jī)與錄音旗唁,去河邊找鬼。 笑死痹束,一個(gè)胖子當(dāng)著我的面吹牛检疫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播参袱,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼电谣,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了抹蚀?” 一聲冷哼從身側(cè)響起剿牺,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎环壤,沒想到半個(gè)月后晒来,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郑现,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年湃崩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荧降。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡攒读,死狀恐怖朵诫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情薄扁,我是刑警寧澤剪返,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站邓梅,受9級(jí)特大地震影響脱盲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜日缨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一钱反、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匣距,春花似錦面哥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恩静,卻和暖如春焕毫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驶乾。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工邑飒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人级乐。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓疙咸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親风科。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撒轮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容