基于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 相关文章推荐
在JavaScript中,为什么要尽可能使用局部变量?
Apr 06 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 Javascript
js弹出层永远居中实现思路及代码
Nov 29 Javascript
js检测网络是否具体连接功能的代码
May 23 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
js使用正则实现ReplaceAll全部替换的方法
Jul 18 Javascript
javascript元素动态创建实现方法
May 13 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
Jul 05 Javascript
vue生成token并保存到本地存储中
Jul 17 Javascript
this.$toast() 了解一下?
Apr 18 Javascript
jquery实现垂直手风琴菜单
Mar 04 jQuery
JavaScript实现放大镜效果代码示例
Apr 29 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中is_file()函数使用指南
2015/05/08 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
Vue.set 全局操作简单示例
2019/09/19 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
python url 参数修改方法
2018/12/26 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
交通文明倡议书
2014/05/16 职场文书
员工生日会策划方案
2014/06/14 职场文书
中学教师个人总结
2015/02/10 职场文书
文明礼仪主题班会
2015/08/13 职场文书