# 導航守衛
>[success] “導航”表示路由正在發生改變。
> 正如其名,`vue-router`提供的導航守衛主要用來通過跳轉或取消的方式守衛導航。有多種機會植入路由導航過程中:全局的, 單個路由獨享的, 或者組件級的。
## 個人的理解
>[danger] 提供的導航守衛主要用來監聽路由的進入和離開的。在進入和離開之前,我們可以驗證或者書寫功能,達到阻止進入當前路由或者跳轉到其它頁面的路由的方式。
>[success] 比如在考慮網站架構設計的時候,如果網站的某些頁面是需要登錄之后才能正常訪問的,如果未登錄是不可以訪問的。或者每個頁面都應該有自己不同的標題等等。
> 登錄注冊--未登錄我們就攔截不讓它訪問,跳轉到登錄頁面。如果登錄成功就正常訪問
> 進入到頁面時,我們可以讓每個頁面的標題都顯示自己的標題。如首頁就顯示首頁相應的標題,詳情就顯示詳情相應的標題。
## 守衛的參數
* **`to: Route`**: 即將要進入的目標[路由對象](https://router.vuejs.org/zh/api/#%E8%B7%AF%E7%94%B1%E5%AF%B9%E8%B1%A1)
* **`from: Route`**: 當前導航正要離開的路由
* **`next: Function`**: 一定要調用該方法來**resolve**這個鉤子。執行效果依賴`next`方法的調用參數。
* **`next()`**: 進行管道中的下一個鉤子。如果全部鉤子執行完了,則導航的狀態就是**confirmed**(確認的)。
* **`next(false)`**: 中斷當前的導航。如果瀏覽器的 URL 改變了 (可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到`from`路由對應的地址。
* **`next('/')`或者`next({ path: '/' })`**: 跳轉到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。你可以向`next`傳遞任意位置對象,且允許設置諸如`replace: true`、`name: 'home'`之類的選項以及任何用在[`router-link`的`to`prop](https://router.vuejs.org/zh/api/#to)或[`router.push`](https://router.vuejs.org/zh/api/#router-push)中的選項。
* **`next(error)`**: (2.4.0+) 如果傳入`next`的參數是一個`Error`實例,則導航會被終止且該錯誤會被傳遞給[`router.onError()`](https://router.vuejs.org/zh/api/#router-onerror)注冊過的回調。
**確保要調用`next`方法,否則鉤子就不會被 resolved。**