vue嵌套路由制作面包屑

嵌套路由本身很簡單休讳,官方文檔描述也都很仔細遵绰。

官方文檔入口

嵌套路由簡單描述

一般情況下如下面的代碼展示的一樣公黑,/join是父頁面,在@/views/join/index.vue這個vue文件中,需要有一個<router-view />去接收嵌套路由的子頁面。也就是代碼展示的@/views/join/detail.vue這個vue文件样漆。這種情況一般就是父頁面需要顯示不同的組件,或者子頁面需要用到的方法晦闰。很常見的功能比如是有幾個導(dǎo)航放祟,切換加載頁面。

export default {
  path: '/join', // 加入我們
  meta: {
    breadName: 'Join'
  },
  name: 'Join',
  component: () => import( /* webpackChunkName: "Join" */ '@/views/join/index.vue'),
  children: [
    {
      // 加入我們詳情
      path: 'detail/:id',  
      name: 'JoinDetail',
      meta: {
        breadName: 'JoinDetail'
      },
      component: () => import(/* webpackChunkName: "JoinDetail" */ '@/views/join/detail.vue'),
    }
  ]
}
上面代碼實現(xiàn)的例子

嵌套路由和面包屑的關(guān)系

vue中呻右,我們不可能自己去寫一個數(shù)組去記錄頁面的跳轉(zhuǎn)路徑跪妥,用戶瀏覽的頁面軌跡。因為通常這些都已經(jīng)在vue-router中已經(jīng)能拿到窿冯。如下代碼所展示的骗奖,通過this.$route.matched可以拿到當前頁面的路徑信息。用上面的代碼舉例醒串,當頁面在/join/detail/123的路徑底下的時候,這時候matched可以拿到/join/join/detail/123

      let matched = this.$route.matched;
      matched = matched.filter(item => {
        return item && item.meta && item.meta.breadName;
      });
      const temp = matched.map((item) => {
        return {
          path: item.path,
          title: item.meta.breadName,
        }
      });
      const result = [{
        path: '/',
        title: 'Home',
      }].concat(temp)

如下圖展示的這樣鄙皇,我們通過matched可以拿到/join/join/detail/123芜赌,一般面包屑會在帶上一個首頁,所以都要自己手動拼一個首頁的內(nèi)容伴逸。拿到這個數(shù)組缠沈,我們就可以通過循環(huán),自己寫出面包屑错蝴,相信作為前端應(yīng)該都會洲愤。

matched的源數(shù)據(jù)

嵌套路由刷新頁面丟失問題

按照上面兩個步驟,基本上是可以實現(xiàn)面包屑的功能顷锰,但是會出現(xiàn)當用戶在/join/detail/123的路徑下的時候柬赐,強制刷新頁面,頁面就丟失了官紫。官方文檔是這樣解釋的肛宋。

官方文檔解釋

大概的意思州藕,當有嵌套路由,并且子頁面是和父頁面一點關(guān)系都沒有的時候酝陈。我們在根節(jié)點上需要有一個router-view去接收它床玻。仔細觀察下下面的代碼和上面的代碼,兩個路由有什么不同的地方沉帮?在主路由上锈死,我們用了一個layout組件接收了它。在children底下穆壕,有一個任何path的都可以訪問匹配到的頁面馅精。

export default {
  path: '/join', // 加入我們
  meta: {
    breadName: 'Join'
  },
  component: ()=> import(/* webpackChunkName: "Layout" */ '@/components/layout.vue'),


  children: [
    { 
      path:'',
      name: 'Join',
      component: () => import( /* webpackChunkName: "Join" */ '@/views/join/index.vue'),
    },
    {
      // 加入我們詳情
      path: 'detail/:id',  
      name: 'JoinDetail',
      meta: {
        breadName: 'JoinDetail'
      },
      component: () => import(/* webpackChunkName: "JoinDetail" */ '@/views/join/detail.vue'),
    }
  ]
}

layout.vue做的事情其實很簡單,它只是有一個router-view去接頁面粱檀,至于具體展示什么洲敢,由children去決定。這樣就不會導(dǎo)致強制刷新頁面失敗茄蚯。

<template>
  <div>
    <router-view :key="key"/>
  </div>
</template>

<script>
export default {
  name: 'r-layout',
  computed: {
    key() {
      return this.$route.path + parseInt((Math.random() * 1000));
    }
  }
}
</script>

總結(jié)

如果父路由和子路由是有關(guān)聯(lián)的压彭,比如我們看淘寶的某個商品,可以通過bar來切換商品參數(shù)渗常,商品介紹什之類的壮不,可以采用第一個,最上面的方案皱碘。
如果父路由和子路由是沒有任何關(guān)系询一,比如商品列表頁面和商品詳情頁面。要采用第三種方案癌椿,需要有一個layout去接收它健蕊。否則會出現(xiàn)刷新頁面,頁面丟失的情況踢俄。
面包屑則通過路由的match缩功,可以拿到當前頁面的路由信息。通常情況下我們會在加上一個首頁的路由都办。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫡锌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子琳钉,更是在濱河造成了極大的恐慌势木,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歌懒,死亡現(xiàn)場離奇詭異啦桌,居然都是意外死亡,警方通過查閱死者的電腦和手機歼培,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門震蒋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茸塞,“玉大人,你說我怎么就攤上這事查剖〖嘏埃” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵笋庄,是天一觀的道長效扫。 經(jīng)常有香客問我,道長直砂,這世上最難降的妖魔是什么菌仁? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮静暂,結(jié)果婚禮上济丘,老公的妹妹穿的比我還像新娘。我一直安慰自己洽蛀,他們只是感情好摹迷,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著郊供,像睡著了一般峡碉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驮审,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天鲫寄,我揣著相機與錄音,去河邊找鬼疯淫。 笑死地来,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的峡竣。 我是一名探鬼主播靠抑,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼适掰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荠列,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤类浪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肌似,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體费就,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年川队,在試婚紗的時候發(fā)現(xiàn)自己被綠了力细。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睬澡。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眠蚂,靈堂內(nèi)的尸體忽然破棺而出煞聪,到底是詐尸還是另有隱情,我是刑警寧澤逝慧,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布昔脯,位于F島的核電站,受9級特大地震影響笛臣,放射性物質(zhì)發(fā)生泄漏云稚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一沈堡、第九天 我趴在偏房一處隱蔽的房頂上張望静陈。 院中可真熱鬧,春花似錦诞丽、人聲如沸鲸拥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崩泡。三九已至,卻和暖如春猬膨,著一層夾襖步出監(jiān)牢的瞬間角撞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工勃痴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谒所,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓沛申,卻偏偏與公主長得像劣领,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铁材,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

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