在Vue中切換路徑時,如果下一個路由與當前頁面共用同一個元件,Vue會複用當前元件,不會重新建立一個。這就導致元件的生命週期函式如mounted, created等不會被觸發,頁面看起來就像什麼都沒發生一樣。 在vue-router 2.2版本之後,可以使用beforeRouteUpdate這個導航守衛來監聽同一個路由更新引數時的情況,但這個守衛並不會在不同路由共用同一元件時觸發。 舉例來說,有下面這一組路由:
const route = [
{
path: '/item/:id/edit',
name: 'editItem',
component: Editor,
}, {
path: '/item/create',
name: 'createItem',
component: Editor,
}
];
複製程式碼
當從/item/22/edit
切換到/item/11/edit
時,會觸發beforeRouteUpdate
。
但如果從/item/22/edit
切換到/item/create
時,並不會觸發beforeRouteUpdate
。
解決方法
如果上面兩個狀況都要監聽到,可以選擇監聽$route
引數,當url發生變化時,都會引起$route
的改變,在監聽函式裡執行需要的操作。
watch: {
'$route': function() {
if (this.$route.name === 'createItem') {
...
} else if (this.$route.name === 'editItem') {
...
}
}
}
複製程式碼