在main.js文件中,我們使用createRouter方法來創建路由實例,此路由實例可以使用beforeEach來注冊全局的前置導航守衛。每當觸發導航跳轉時,都會被此導航守衛捕獲。示例如下:

當一個導航觸發時,全局前置守衛按照創建順序調用。守衛是異步解析執行,此時導航在所有守衛 resolve 完之前一直處于等待中。
每個守衛方法接收兩個參數:to: 即將要跳轉到的路由對象;from: 當前導航將要離開的路由對象。
若注冊的beforeEach方法返回的是布爾值時,其用來決定是否允許此次導航跳轉。如以下代碼,所有路由跳轉都將被禁止。
router.beforeEach(async (to, from) => {
Return false;
}
更多時候,我們會在beforeEach方法中返回一個路由配置對象來決定要跳轉的頁面。這種方式更加靈活,如:
router.beforeEach(async (to, from) => {
If(to.name!= ‘setting’) {return {name:’setting’}}
}
可選的第三個參數 next。由于在導航守衛確認通過前,新的組件還沒有被創建,此時若想使用當前組件實例處理一些邏輯,則可以通過next參數注冊回調方法。如圖:

在beforeRouteUpdate和beforeRouteLeave方法中可以直接使用this關鍵字來獲取當前組件實例,無需額外的操作。
上一篇: 超出顯示省略號
下一篇: 利用迅睿cms做一個選項卡切換(上)



