Vuerouter的beforeEach与afterEach钩子函数的区别


Posted in Javascript onDecember 26, 2018

在路由跳转的时候,我们需要一些权限判断或者其他操作。这个时候就需要使用路由的钩子函数。

定义:路由钩子主要是给使用者在路由发生变化时进行一些特殊的处理而定义的函数。

总体来讲vue里面提供了三大类钩子,两种函数
1、全局钩子
2、某个路由的钩子
3、组件内钩子

两种函数:

1、Vue.beforeEach(function(to,form,next){}) /*在跳转之前执行*/

2.Vue.afterEach(function(to,form))/*在跳转之后判断*/

全局钩子函数

顾名思义,它是对全局有效的一个函数

router.beforeEach((to, from, next) => {

  let token = router.app.$storage.fetch("token");

  let needAuth = to.matched.some(item => item.meta.login);

  if(!token && needAuth) return next({path: "/login"});

  next();

});

beforeEach函数有三个参数:

  • to:router即将进入的路由对象
  • from:当前导航即将离开的路由
  • next:Function,进行管道中的一个钩子,如果执行完了,则导航的状态就是 confirmed (确认的);否则为false,终止导航。

afterEach函数不用传next()函数

某个路由的钩子函数

顾名思义,它是写在某个路由里头的函数,本质上跟组件内函数没有区别。

const router = new VueRouter({
 routes: [
  {
   path: '/login',
   component: Login,
   beforeEnter: (to, from, next) => {
    // ...
   },
   beforeLeave: (to, from, next) => {
    // ...
   }
  }
 ]
})

路由组件的钩子

注意:这里说的是路由组件!

路由组件 属于 组件,但组件 不等同于 路由组件!所谓的路由组件:直接定义在router中component处的组件。如:

var routes = [
  {
  path:'/home',
  component:home,
  name:"home"
  }
]

在子组件中调用路由的钩子函数时无效的。

在官方文档上是这样定义的:

可以在路由组件内直接定义以下路由导航钩子

  • beforeRouteEnter
  • beforeRouteUpdate (2.2 新增)
  • beforeRouteLeave

这里简单说下钩子函数的用法:它是和data,methods平级的。

beforeRouteLeave(to, from, next) {
  next()
},
beforeRouteEnter(to, from, next) {
  next()
},
beforeRouteUpdate(to, from, next) {
  next()
},
data:{},
method: {}

PS:在使用vue-router beforeEach钩子时,你也许会遇到如下问题:

源码:

router.beforeEach((to, from, next) => {
//判断登录状态简单实例
var userInfo = window.localStorage.getItem('token');
if (userInfo) {
next();
} else {
next('/login');
}
})

然后你会发现出现如下错误:出现dead loop错误

Vuerouter的beforeEach与afterEach钩子函数的区别

解决方案:

router.beforeEach((to, from, next) => {
var userInfo = window.localStorage.getItem('token');//获取浏览器缓存的用户信息
if(userInfo){ //如果有就直接到首页咯
next();
} else {
if(to.path=='/login'){ //如果是登录页面路径,就直接next()
next();
} else { //不然就跳转到登录;
next('/login');
}

}
})

解决思路:

排除此时地址 = 转向的地址 的情况,避免dead loop, 问题很简单,但一不小心就入坑了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 初体验(建议学习jquery)
Apr 25 Javascript
关于javascript DOM事件模型的两件事
Jul 22 Javascript
javascript实现数组中的内容随机输出
Aug 11 Javascript
AngularJS入门教程之控制器详解
Jul 27 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
Aug 08 Javascript
JS自动生成动态HTML验证码页面
Jun 14 Javascript
使用async-validator编写Form组件的方法
Jan 10 Javascript
JavaScript中发出HTTP请求最常用的方法
Jul 12 Javascript
小程序组件之仿微信通讯录的实现代码
Sep 12 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
Sep 16 Javascript
koa router 多文件引入的方法示例
May 22 Javascript
layer实现弹出层自动调节位置
Sep 05 Javascript
使用Sonarqube扫描Javascript代码的示例
Dec 26 #Javascript
angular6的table组件开发的实现示例
Dec 26 #Javascript
详解VUE里子组件如何获取父组件动态变化的值
Dec 26 #Javascript
JavaScript基础之静态方法和实例方法分析
Dec 26 #Javascript
微信小程序实现文字跑马灯
May 26 #Javascript
基于JavaScript canvas绘制贝塞尔曲线
Dec 25 #Javascript
基于js Canvas实现二次贝塞尔曲线
Dec 25 #Javascript
You might like
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
一个简单至极的PHP缓存类代码
2015/10/23 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
python中的随机函数random的用法示例
2018/01/27 Python
python 对key为时间的dict排序方法
2018/10/17 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
使用phonegap进行提示操作的具体方法
2017/03/30 HTML / CSS
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
介绍下java.util.Arrays类
2012/10/16 面试题
班主任工作年限证明
2014/01/12 职场文书
七一表彰活动方案
2014/01/18 职场文书
升旗仪式演讲稿
2014/05/08 职场文书
学生实习证明范文
2014/09/28 职场文书
关于远足的感想
2015/08/10 职场文书
技术入股协议书
2016/03/22 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书
解决 redis 无法远程连接
2022/05/15 Redis
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers