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 相关文章推荐
Js获取事件对象代码
Aug 05 Javascript
10款非常有用的 Ajax 插件分享
Mar 14 Javascript
Js+Flash实现访问剪切板操作
Nov 20 Javascript
教你如何使用node.js制作代理服务器
Nov 26 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
使用Node.js实现ORM的一种思路详解(图文)
Oct 24 Javascript
详解Vuex管理登录状态
Nov 13 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
Aug 12 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
Sep 27 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
Sep 23 Javascript
详解JS WebSocket断开原因和心跳机制
May 07 Javascript
JS前端轻量fabric.js系列之画布初始化
Aug 05 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设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
php自定义hash函数实例
2015/05/05 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
django富文本编辑器的实现示例
2019/04/10 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
基于python实现对文件进行切分行
2020/04/26 Python
主要的Ajax框架都有什么
2013/11/14 面试题
中专生自我鉴定范文
2013/12/19 职场文书
人力资源专员岗位职责
2014/01/30 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
早会开场白台词大全
2015/06/01 职场文书
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏