鍍金池/ 問(wèn)答/HTML/ vue-router 嵌套路由書(shū)寫(xiě)順序問(wèn)題

vue-router 嵌套路由書(shū)寫(xiě)順序問(wèn)題

問(wèn)題如圖:
如果我的 /user/:username 寫(xiě)到這個(gè)位置,那么我的 /user/task 路由就失效,未報(bào)錯(cuò)。
但前端點(diǎn)擊相關(guān)鏈接,瀏覽器地址欄變化為 http://localhost:8080/user/task,但內(nèi)容是 /user/info的內(nèi)容。
clipboard.png

若將 /user/:username 寫(xiě)到所有子路的下面,也就是如圖。一切正常。
迷惑不解,文檔在嵌套路由中沒(méi)有相關(guān)的問(wèn)題說(shuō)明。
請(qǐng)有經(jīng)驗(yàn)的朋友指點(diǎn)一二。

clipboard.png

回答
編輯回答
憶當(dāng)年

命名沖突:username匹配的是/user/這個(gè)目錄下的所有路徑
/user/1,/user/list等都會(huì)匹配到
vue-router中有一句話(huà): 同一個(gè)路徑可以匹配多個(gè)路由,此時(shí),匹配的優(yōu)先級(jí)就按照路由的定義順序:誰(shuí)先定義的,誰(shuí)的優(yōu)先級(jí)就最高。
所以你的:username寫(xiě)到第二位下面的都匹配不到
你可以試試放到最后

2018年5月3日 10:49
編輯回答
神經(jīng)質(zhì)

提醒一下,當(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 守衛(wèi):

const User = {
template: '...',
beforeRouteUpdate (to, from, next) {

// react to route changes...
// don't forget to call next()

}
}

2017年1月2日 12:35
編輯回答
有點(diǎn)壞

這和子路由沒(méi)有直接關(guān)系的,而是路由是從上到下匹配的,你的/user/:username這個(gè)路由是能匹配到/user/task和/user/info的。會(huì)把task和info識(shí)別為username,所以要不/user/:username寫(xiě)在最后面

2018年9月3日 11:41