基于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 实现父窗口引用弹出窗口的值的脚本
Aug 07 Javascript
js禁止document element对象选中文本实现代码
Mar 21 Javascript
iframe窗口高度自适应的实现方法
Jan 08 Javascript
js实现身份证号码验证的简单实例
Feb 19 Javascript
js+canvas简单绘制圆圈的方法
Jan 28 Javascript
jQuery Mobile动态刷新页面样式的实现方法
May 28 Javascript
Jquery on方法绑定事件后执行多次的解决方法
Jun 02 Javascript
webpack学习教程之publicPath路径问题详解
Jun 17 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
利用Node.js检测端口是否被占用的方法
Dec 07 Javascript
微信小程序倒计时功能实例代码
Jul 17 Javascript
Vue与Node.js通过socket.io通信的示例代码
Jul 25 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 404错误页面实现代码
2009/06/22 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
jquery tools 系列 scrollable学习
2009/09/06 Javascript
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
简单谈谈json跨域
2016/03/13 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
使用Python生成随机密码的示例分享
2016/02/18 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
Django model update的多种用法介绍
2020/03/28 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
Python celery原理及运行流程解析
2020/06/13 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
英国计算机商店:Technextday
2019/12/28 全球购物
什么是makefile? 如何编写makefile?
2013/01/02 面试题
工地门卫岗位职责
2013/12/30 职场文书
转变工作作风心得体会
2016/01/23 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js