Vue動(dòng)態(tài)路由

#動(dòng)態(tài)路由匹配

我們經(jīng)常需要把某種模式匹配到的所有路由忠寻,全都映射到同個(gè)組件潘懊。例如借帘,我們有一個(gè) User 組件,對(duì)于所有 ID 各不相同的用戶(hù)菇用,都要使用這個(gè)組件來(lái)渲染。那么陷揪,我們可以在 vue-router 的路由路徑中使用“動(dòng)態(tài)路徑參數(shù)”(dynamic segment) 來(lái)達(dá)到這個(gè)效果:

const User = {
  template: '<div>User</div>'
}

const router = new VueRouter({
  routes: [
    // 動(dòng)態(tài)路徑參數(shù) 以冒號(hào)開(kāi)頭
    { path: '/user/:id', component: User }
  ]
})

現(xiàn)在呢惋鸥,像 /user/foo/user/bar 都將映射到相同的路由杂穷。

一個(gè)“路徑參數(shù)”使用冒號(hào) : 標(biāo)記。當(dāng)匹配到一個(gè)路由時(shí)卦绣,參數(shù)值會(huì)被設(shè)置到 this.$route.params耐量,可以在每個(gè)組件內(nèi)使用。于是滤港,我們可以更新 User 的模板廊蜒,輸出當(dāng)前用戶(hù)的 ID:

const User = {
  template: '<div>User {{ $route.params.id }}</div>'
}

你可以看看這個(gè)在線(xiàn)例子

你可以在一個(gè)路由中設(shè)置多段“路徑參數(shù)”溅漾,對(duì)應(yīng)的值都會(huì)設(shè)置到 $route.params 中山叮。例如:

模式 匹配路徑 $route.params
/user/:username /user/evan { username: 'evan' }
/user/:username/post/:post_id /user/evan/post/123 { username: 'evan', post_id: '123' }

除了 $route.params 外,$route 對(duì)象還提供了其它有用的信息添履,例如屁倔,$route.query (如果 URL 中有查詢(xún)參數(shù))、$route.hash 等等暮胧。你可以查看 API 文檔 的詳細(xì)說(shuō)明锐借。

#響應(yīng)路由參數(shù)的變化

提醒一下,當(dāng)使用路由參數(shù)時(shí)往衷,例如從 /user/foo 導(dǎo)航到 /user/bar钞翔,原來(lái)的組件實(shí)例會(huì)被復(fù)用。因?yàn)閮蓚€(gè)路由都渲染同個(gè)組件炼绘,比起銷(xiāo)毀再創(chuàng)建嗅战,復(fù)用則顯得更加高效。不過(guò)俺亮,這也意味著組件的生命周期鉤子不會(huì)再被調(diào)用驮捍。

復(fù)用組件時(shí),想對(duì)路由參數(shù)的變化作出響應(yīng)的話(huà)脚曾,你可以簡(jiǎn)單地 watch (監(jiān)測(cè)變化) $route 對(duì)象:

const User = {
  template: '...',
  watch: {
    $route(to, from) {
      // 對(duì)路由變化作出響應(yīng)...
    }
  }
}

或者使用 2.2 中引入的 beforeRouteUpdate 導(dǎo)航守衛(wèi)

const User = {
  template: '...',
  beforeRouteUpdate (to, from, next) {
    // react to route changes...
    // don't forget to call next()
  }
}

#捕獲所有路由或 404 Not found 路由

常規(guī)參數(shù)只會(huì)匹配被 / 分隔的 URL 片段中的字符东且。如果想匹配任意路徑,我們可以使用通配符 (*):

{
  // 會(huì)匹配所有路徑
  path: '*'
}
{
  // 會(huì)匹配以 `/user-` 開(kāi)頭的任意路徑
  path: '/user-*'
}

當(dāng)使用通配符路由時(shí)本讥,請(qǐng)確保路由的順序是正確的珊泳,也就是說(shuō)含有通配符的路由應(yīng)該放在最后。路由 { path: '*' } 通常用于客戶(hù)端 404 錯(cuò)誤拷沸。如果你使用了History 模式色查,請(qǐng)確保正確配置你的服務(wù)器

當(dāng)使用一個(gè)通配符時(shí)撞芍,$route.params 內(nèi)會(huì)自動(dòng)添加一個(gè)名為 pathMatch 參數(shù)秧了。它包含了 URL 通過(guò)通配符被匹配的部分:

// 給出一個(gè)路由 { path: '/user-*' }
this.$router.push('/user-admin')
this.$route.params.pathMatch // 'admin'
// 給出一個(gè)路由 { path: '*' }
this.$router.push('/non-existing')
this.$route.params.pathMatch // '/non-existing'

#高級(jí)匹配模式

vue-router 使用 path-to-regexp 作為路徑匹配引擎,所以支持很多高級(jí)的匹配模式序无,例如:可選的動(dòng)態(tài)路徑參數(shù)验毡、匹配零個(gè)或多個(gè)衡创、一個(gè)或多個(gè),甚至是自定義正則匹配晶通。查看它的文檔學(xué)習(xí)高階的路徑匹配璃氢,還有這個(gè)例子 展示 vue-router 怎么使用這類(lèi)匹配。

#匹配優(yōu)先級(jí)

有時(shí)候狮辽,同一個(gè)路徑可以匹配多個(gè)路由一也,此時(shí),匹配的優(yōu)先級(jí)就按照路由的定義順序:誰(shuí)先定義的隘竭,誰(shuí)的優(yōu)先級(jí)就最高塘秦。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市动看,隨后出現(xiàn)的幾起案子尊剔,更是在濱河造成了極大的恐慌,老刑警劉巖菱皆,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件须误,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡仇轻,警方通過(guò)查閱死者的電腦和手機(jī)京痢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)篷店,“玉大人祭椰,你說(shuō)我怎么就攤上這事∑I拢” “怎么了方淤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)蹄殃。 經(jīng)常有香客問(wèn)我携茂,道長(zhǎng),這世上最難降的妖魔是什么诅岩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任讳苦,我火速辦了婚禮,結(jié)果婚禮上吩谦,老公的妹妹穿的比我還像新娘鸳谜。我一直安慰自己,他們只是感情好式廷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布咐扭。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪草描。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天策严,我揣著相機(jī)與錄音穗慕,去河邊找鬼。 笑死妻导,一個(gè)胖子當(dāng)著我的面吹牛逛绵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倔韭,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼术浪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了寿酌?” 一聲冷哼從身側(cè)響起胰苏,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎醇疼,沒(méi)想到半個(gè)月后硕并,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秧荆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年倔毙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乙濒。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陕赃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颁股,到底是詐尸還是另有隱情么库,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布豌蟋,位于F島的核電站廊散,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏梧疲。R本人自食惡果不足惜允睹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幌氮。 院中可真熱鬧缭受,春花似錦、人聲如沸该互。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蔓搞,卻和暖如春胰丁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喂分。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工锦庸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒲祈。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓甘萧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親梆掸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扬卷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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