基于Vue2.X的路由和钩子函数详解


Posted in Javascript onFebruary 09, 2018

最近上班有些忙,好久没有更新文章,也没学习新的东西。

今天来说说这个路由钩子吧。

导航和钩子函数:

导航:路由正在发生改变 关键字:路由 变

钩子函数:在路由切换的不同阶段调用不同的节点函数(钩子函数在我看来也就是:某个节点和时机触发的函数)。

钩子函数 主要用来拦截导航,让它完成跳转或取消,在导航的不同阶段来执行不同的函数 ,最后钩子函数的执行结果会告诉导航怎么做。。

导航在所有钩子 resolve 完之前一直处于 等待中,等待钩子函数告诉它下一步该怎么做。用next()来指定。

我来给大家举个登陆的例子

router.beforeEach(({meta, path}, from, next) => { 
 

const {auth = true} = meta  // meta代表的是to中的meta对象,path代表的是to中的path对象 
 

var isLogin = Boolean(store.state.user.id) // true用户已登录, false用户未登录  

 

if (auth && !isLogin && path !== '/login') { // auth 代表需要通过用户身份验证,默认为true,代表需要被验证, false为不用检验 


return next({ path: '/login' }) // 跳转到login页面 

} 
 
 

next() // 进行下一个钩子函数 
})

先说这个beforeEach的钩子函数,它是一个全局的before 钩子函数, (before each)意思是在 每次每一个路由改变的时候都得执行一遍。

它的三个参数:

to: (Route路由对象) 即将要进入的目标 路由对象 to对象下面的属性: path params query hash fullPath matched name meta(在matched下,但是本例可以直接用)

from: (Route路由对象) 当前导航正要离开的路由

next: (Function函数) 一定要调用该方法来 resolve 这个钩子。 调用方法:next(参数或者空) ***必须调用

next(无参数的时候): 进行管道中的下一个钩子,如果走到最后一个钩子函数,那么 导航的状态就是 confirmed (确认的)

next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。

全局钩子函数之 全局的afterEach钩子:

after 钩子没有 next 方法,不能改变导航,代表已经确定好了导航怎么去执行后,附带的一个执行钩子函数

组件内的钩子函数:( beforeRouteEnter 和 beforeRouteLeave 再加一个 watch函数 )

vue2.X的组件内钩子函数比vue1.X减少了许多。。

使用组件自身的生命周期钩子函数来替代 activate 和 deactivate

在 $router 上使用 watcher 来响应路由改变

canActivate 可以被 router 的配置中的 beforeEnter 中实现

canDeactivate 已经被 beforeRouteLeave 取代, 后者在一个组件的根级定义中指定。这个钩子函数在调用时是将组件的实例作为其上下文的。

canReuse 已经被移除,因其容易混淆且很少被用到。

用ajax获取数据的data(to, from, next) 钩子用组件内 beforeRouteEnter (to, from, next)来替代

以上这篇基于Vue2.X的路由和钩子函数详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery的实现原理的模拟代码 -2 数据部分
Aug 01 Javascript
JavaScript实现找质数代码分享
Mar 24 Javascript
JavaScript 事件入门知识
Apr 13 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
Nov 24 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
Apr 08 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
Oct 16 Javascript
COM组件中调用JavaScript函数详解及实例
Feb 23 Javascript
iframe高度自适应及隐藏滚动条的实例详解
Sep 29 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
Nov 20 Javascript
一文搞懂ES6中的Map和Set
May 20 Javascript
layui实现数据分页功能
Jul 27 Javascript
Vuejs 单文件组件实例详解
Feb 09 #Javascript
vue-lazyload图片延迟加载插件的实例讲解
Feb 09 #Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
Feb 09 #Javascript
在Vue中使用highCharts绘制3d饼图的方法
Feb 08 #Javascript
vue中使用ueditor富文本编辑器
Feb 08 #Javascript
React Native自定义控件底部抽屉菜单的示例
Feb 08 #Javascript
vue 使用ref 让父组件调用子组件的方法
Feb 08 #Javascript
You might like
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
js控制框架刷新
2008/08/01 Javascript
javascript 贪吃蛇实现代码
2008/11/22 Javascript
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
2010/06/28 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
Js,alert出现乱码问题的解决方法
2013/06/19 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
Python实现把回车符\r\n转换成\n
2015/04/23 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
python实现logistic分类算法代码
2020/02/28 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
企业治理工作自我评价
2013/09/26 职场文书
政法大学毕业生自荐信范文
2014/01/01 职场文书
个人求职信范文分享
2014/01/31 职场文书
村抢险救灾方案
2014/05/09 职场文书
2014年财政局工作总结
2014/12/09 职场文书
期中考试复习计划
2015/01/19 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python
Redis如何实现分布式锁
2021/08/23 Redis
JavaScript 反射学习技巧
2021/10/16 Javascript
使用refresh_token实现无感刷新页面
2022/04/26 Javascript
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers