這次帶給大家Vue路由鉤子實戰使用教程,Vue路由鉤子使用的注意事項有哪些,下面就是實戰案例,一起來看一下。
一.路由鉤子語法
# 在vue-router的官方文件中, 將路由鉤子翻譯為導航守衛, 下面是文檔中的內容摘要, 大家也可以透過傳送門前往官網閱讀詳細內容
路由鉤子
路由鉤子主要是給使用者在路由發生變化時進行一些特殊的處理而定義的,靠。 。好拗口啊。
整體來講vue裡面提供了三大類鉤子
1.全域鉤子
2、某個路由獨享的鉤子
3、元件內鉤子
# 三種路由鉤子中都涉及了三個參數,這裡直接上官方介紹吧
#
to: Route: 即將進入的目標 路由物件
from: Route: 目前導覽正要離開的路由
next: Function: 一定要呼叫該方法來 resolve 這個鉤子。執行效果依賴 next 方法的呼叫參數。
next(): 進行管道中的下一個鉤子。如果全部鉤子執行完了,則導航的狀態就是 confirmed (確認的)。
next(false): 中斷目前的導航。如果瀏覽器的 URL 改變了(可能是使用者手動或瀏覽器後退按鈕),那麼 URL 位址會重設到 from 路由對應的位址。
next(‘/') 或 next({ path: ‘/' }): 跳到一個不同的位址。目前的導航被中斷,然後進行一個新的導航。
(一).全域守衛(全域路由鉤子)
# 你可以使用 router.beforeEach 註冊一個全域前守衛:
const router = new VueRouter({ ... }) router.beforeEach((to, from, next) => { // ... next() })
每個守衛方法接受三個參數:
to: Route: 即將進入的目標路由物件
(二).路由獨享的守衛(路由內鉤子)
你可以在路由配置上直接定義 beforeEnter 守衛:const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, beforeEnter: (to, from, next) => { // ... } } ] })這些守衛與全域前置守衛的方法參數是一樣的。
(三). 元件內的守衛(元件內鉤子)
最後, 你可以在路由元件中直接定義一下路由導航守衛:const Foo = { template: `...`, beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `this` // 因为当守卫执行前,组件实例还没被创建 }, beforeRouteUpdate (to, from, next) { // 在当前路由改变,但是该组件被复用时调用 // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候, // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 // 可以访问组件实例 `this` }, beforeRouteLeave (to, from, next) { // 导航离开该组件的对应路由时调用 // 可以访问组件实例 `this` } }
二.路由鉤子在實際開發中的應用場景
# 路由鉤子在實際的開發過程中使用較少, 我在實際的項目中只在組件內使用過beforeRouteLeave, 使用場景分別為一下三類情況:# # 當一個元件中有一個定時器時, 在路由進行切換的時候, 可使用beforeRouteLeave將定時器進行清楚, 以免佔用內存:beforeRouteLeave (to, from, next) { window.clearInterval(this.timer) //清楚定时器 next() }#
(二) 當頁面中有未關閉的視窗, 或未儲存的內容, 阻止頁面跳轉
如果頁面內有重要的資訊需要用戶儲存後才能進行跳轉, 或有彈出框的情況. 應該阻止用戶跳轉beforeRouteLeave (to, from, next) { //判断是否弹出框的状态和保存信息与否 if (this.dialogVisibility === true) { this.dialogVisibility = false //关闭弹出框 next(false) //回到当前页面, 阻止页面跳转 }else if(this.saveMessage === false) { alert('请保存信息后退出!') //弹出警告 next(false) //回到当前页面, 阻止页面跳转 }else { next() //否则允许跳转 } }
(三) 將相關內容保存到Vuex中或Session中
當使用者需要關閉頁面時, 可以將公用的資訊保存到session或Vuex中beforeRouteLeave (to, from, next) { localStorage.setItem(name, content); //保存到localStorage中 next() }#相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章! 推薦閱讀:
以上是Vue路由鉤子的實戰使用教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!