問題
分別打開兩個(gè)詳情頁面,復(fù)制其中一個(gè)到另一個(gè)的地址欄中輸入url钉赁,按回車鍵蹄殃,頁面卻沒有刷新,怎么回事你踩?
思考
由于vue項(xiàng)目采用hash模式诅岩,詳情頁面采用同一組件,vue官方文檔這樣解釋:
提醒一下函匕,當(dāng)使用路由參數(shù)時(shí)缀旁,例如從 /user/foo 導(dǎo)航
到 /user/bar藕届,原來的組件實(shí)例會(huì)被復(fù)用。因?yàn)閮蓚€(gè)路由都渲染同個(gè)組件式廷,比起銷毀再創(chuàng)建,復(fù)用則顯得更加高效芭挽。不過滑废,這也意味著組件的生命周期鉤子不會(huì)再被調(diào)用。
復(fù)用組件時(shí)袜爪,想對(duì)路由參數(shù)的變化作出響應(yīng)的話蠕趁,你可以簡單地 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()
}
}
最快解決方案
在父組件的 router-view
中加一個(gè) key
,例如:
<router-view :key="$route.fullPath" />