有的时候,我们需要通过路由来进行一些操作,比如最常见的登录权限验证,当用户满足条件时,才让其进入导航,否则就取消跳转,并跳到登录页面让其登录。

为此我们有很多种方法可以植入路由的导航过程:全局的, 单个路由独享的, 或者组件级的。

全局守卫

vue-router全局有三个守卫:

  1. router.beforeEach 全局前置守卫 进入路由之前
  2. router.beforeResolve 全局解析守卫(2.5.0+) 在beforeRouteEnter调用之后调用
  3. router.afterEach 全局后置钩子 进入路由之后
// main.js 入口文件
import router from './router'; // 引入路由
router.beforeEach((to, from, next) => {
 next();
});
router.beforeResolve((to, from, next) => {
 next();
});
router.afterEach((to, from) => {
 console.log('afterEach 全局后置钩子');
});
to,from,next 这三个参数:

to和from是将要进入和将要离开的路由对象,路由对象指的是平时通过this.$route获取到的路由对象。

  1. next:Function 这个参数是个函数,且必须调用,否则不能进入路由(页面空白)。
  2. next() 进入该路由。
  3. next(false): 取消进入路由,url地址重置为from路由地址(也就是将要离开的路由地址)。
  4. next 跳转新路由,当前的导航被中断,重新开始一个新的导航。

我们可以这样跳转:next('path地址')或者next({path:''})或者next({name:''})

且允许设置诸如 replace: true、name: 'home' 之类的选项

以及你用在router-link或router.push的对象选项。

路由独享守卫:

如果你不想全局配置守卫的话,你可以为某些路由单独配置守卫:

const router = new VueRouter({
 routes: [
 {
  path: '/foo',
  component: Foo,
  beforeEnter: (to, from, next) => {
  // 参数用法什么的都一样,调用顺序在全局前置守卫后面,所以不会被全局守卫覆盖
  // ...
  }
 }
 ]
})

路由组件内的守卫:

  1. beforeRouteEnter 进入路由前
  2. beforeRouteUpdate (2.2) 路由复用同一个组件时
  3. beforeRouteLeave 离开当前路由时

文档中的介绍:

beforeRouteEnter (to, from, next) {
// 在路由独享守卫后调用 不!能!获取组件实例 `this`,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
// 在当前路由改变,但是该组件被复用时调用 可以访问组件实例 `this`
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
},
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用,可以访问组件实例 `this`
}

最新文章

  1. hiho一下121周 后缀数组二·重复旋律2
  2. 将项目初始化到git服务器
  3. Chef
  4. Linux中的堡垒--iptables
  5. TFS使用小技巧
  6. 学习笔记--DI(依赖注入) 、Ioc(控制反转)
  7. linux的学习系列 1---简介
  8. HTML的TextArea标记跟随文本内容自动设置高度
  9. 为应用程序的选项卡及ActionBar设置样式
  10. 谨慎修改Python的类属性
  11. C++笔记十二:C++对C的扩展——struct关键字类型增强
  12. VS编译代码未通过,常见问题。
  13. Java Selenium中的几种等待方式
  14. 组件、框架、Packagist、Composer
  15. linux下 XGCOM串口助手的安装
  16. nancy 中的json问题
  17. MSA(微服务简介)
  18. [caffe]caffe资料收集
  19. Codeforces Round #496 (Div. 3) E2 - Median on Segments (General Case Edition)
  20. C# 递归查找文件夹下所有文件和子文件夹的所有文件

热门文章

  1. http摘要认证
  2. 指定的经纬度是否落在多边形内 java版
  3. 新ubuntu系统装软件
  4. win10.64位wnmp-nginx1.14.0 + PHP 5. 6.36 + MySQL 5.5.59 环境配置搭建 结合Thinkphp3.2.3
  5. kafka connect rest api
  6. Unity GeometryShader(从一个线框渲染的例子开始)
  7. 棒槌的工作第11天-----------------------单词(select和epoll)
  8. Java ---- 遍历链表(递归与非递归实现)
  9. DevExpress 折线图和柱状图的绘制与数据绑定
  10. IDEA overwrite报错、languagelevel设置不生效问题