vue-router 导航钩子的具体使用方法


Posted in Javascript onAugust 31, 2017

vue-router 提供的导航钩子主要用来拦截导航,让它完成跳转或取消。

全局钩子

1、router.beforeEach 注册一个全局的 before 钩子:

const router = new VueRouter({ ... })

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

每个钩子方法接收三个参数:

  • to: Route: 即将要进入的目标 路由对象
  • from: Route: 当前导航正要离开的路由
  • next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

next(false): 中断当前的导航。如果浏览器的 URL 改变了(可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

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

2.afterEach同理,只是不用传入next函数

示例:一个单页面应用,返回首页时,保存其在首页的浏览位置。并且给每一个页面title赋值

const router = new VueRouter({
 base: __dirname,
 routes
});

new Vue({ // eslint-disable-line
 el: '#app',
 render: h => h(App),
 router
});

let indexScrollTop = 0;
router.beforeEach((route, redirect, next) => {
 if (route.path !== '/') {
  indexScrollTop = document.body.scrollTop;
 }
 document.title = route.meta.title || document.title;
 next();
});

router.afterEach(route => {
 if (route.path !== '/') {
  document.body.scrollTop = 0;
 } else {
  Vue.nextTick(() => {
   document.body.scrollTop = indexScrollTop;
  });
 }
})

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

Javascript 相关文章推荐
基于jquery的获取浏览器窗口大小的代码
Mar 28 Javascript
通过js来制作复选框的全选和不选效果
May 22 Javascript
jquery马赛克拼接翻转效果代码分享
Aug 24 Javascript
Bootstrap每天必学之模态框(Modal)插件
Apr 26 Javascript
javascript实现不同颜色Tab标签切换效果
Apr 27 Javascript
微信小程序 radio单选框组件详解及实例代码
Jan 10 Javascript
angularJS深拷贝详解
Mar 23 Javascript
详谈js模块化规范
Jul 07 Javascript
Node.js实现连接mysql数据库功能示例
Sep 15 Javascript
Angular5.1新功能分享
Dec 21 Javascript
浅谈webpack4.x 入门(一篇足矣)
Sep 05 Javascript
实例讲解vue源码架构
Jan 24 Javascript
浅谈express 中间件机制及实现原理
Aug 31 #Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
Aug 31 #Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
Aug 31 #Javascript
Angular2 http jsonp的实例详解
Aug 31 #Javascript
BootStrap中Table隐藏后显示问题的实现代码
Aug 31 #Javascript
Cpage.js给组件绑定事件的实现代码
Aug 31 #Javascript
基于canvas粒子系统的构建详解
Aug 31 #Javascript
You might like
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
JQuery获取表格数据示例代码
2014/05/26 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
Python提取网页中超链接的方法
2016/09/18 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
Python 实现简单的客户端认证
2020/07/29 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
小学社团活动总结
2014/06/27 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
Python读取和写入Excel数据
2022/04/20 Python