Vue.js 最常用的路由管理器是 vue-router。這個管理器非常強大,但有時候我們可能需要在路由的轉換前或后做一些額外的操作。這就是 Vue 的 afterRouteEnter 和 beforeRouteLeave 鉤子函數發揮作用的時候。
讓我們先來看看 afterRouteEnter 鉤子函數。這個函數會在路由切換完成后被調用。需要注意的是,在進入頁面的初始加載時是不會調用這個函數的。
// 組件中的鉤子函數 export default { name: 'MyComponent', afterRouteEnter (to, from, next) { console.log('路由切換成功'); next(); // 必須調用 next() 方法才能繼續執行路由的轉換 } }
鉤子函數的參數列表非常簡單,分別是 to,from 和 next 三個參數。to 和 from 是兩個 Route Object 對象,分別代表新路由和舊路由。在這個鉤子函數中,我們可以對這兩個對象進行比對,來做一些有意義的事情。例如:
export default { name: 'MyComponent', afterRouteEnter (to, from, next) { if (to.params.userId !== from.params.userId) { console.log(`用戶 ID 從 ${from.params.userId} 切換至 ${to.params.userId}`); } next(); } }
上面的代碼對比了進入頁面前后的路由對象,如果用戶 ID 發生了變化,則會打印一條日志,告訴我們用戶 ID 已經發生了變化。
除了 afterRouteEnter,Vue 還提供了 beforeRouteLeave 鉤子函數,這個函數會在離開頁面的時候被觸發。
export default { name: 'MyComponent', beforeRouteLeave (to, from, next) { if (this.formIsDirty) { if (confirm('您有未保存的修改,確定要離開嗎?')) { next(); } else { next(false); } } else { next(); } } }
在這個例子中,我們不知道路由切換后會到哪里,只知道即將要離開這個組件。在這個時候,我們可以檢查是否有未保存的修改,然后彈出一個確認框,詢問用戶是否確定要離開。我們可以通過 next(false) 的方式來取消路由的轉換過程。
以上就是 Vue.js 中兩種路由鉤子函數的使用方法。它們很方便,可以讓你在路由切換過程中執行一些額外的操作。應該盡量多地利用它們,來提高應用程序的交互性。