beforeRouteEnter 是組件內的路由導航守衛,在確認渲染該組件的對應路由前調用。該守衛不能訪問 this,但我們通過傳一個回調給 next,就可以使用上面的 vm 來訪問組件實例。守衛的參數說明如下:
to:即將要進入的目標路由;from:當前導航正要離開的路由,from.name是路由的名稱,對應路由配置中的name;next:一個用來 resolve 當前鈎子的方法,需要調用該方法來確認或者中斷導航;
參數 to 和 from 都是 路由對象 (route object),表示當前激活的路由的狀態信息,其常用的屬性有:
name:路由的名稱,如 'Register';path:路由的路徑,如 '/auth/register';params:路由參數對象,如 { id: "1" };query:URL 查詢參數對象,如 { page: "1" };meta:元信息對象,如 { auth: true };
1 // 組件內的路由導航守衛 2 beforeRouteEnter(to, from, next) { 3 // 路由的名稱,對應路由配置中的 name 4 const fromName = from.name 5 6 // 確認導航 7 next(vm => { 8 // 通過 vm 參數訪問組件實例,已登錄時,評估路由名稱 9 if (vm.$store.state.auth) { 10 switch (fromName) { 11 // 如果從注冊頁面跳轉過來 12 case 'Register': 13 // 顯示注冊成功 14 vm.showMsg('注冊成功') 15 break 16 } 17 } 18 }) 19 }
