# 导航守卫
>[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。**