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 相关文章推荐
Ajax,UTF-8还是GB2312 eval 还是execScript
Nov 13 Javascript
javascript开发随笔一 preventDefault的必要
Nov 25 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
vue.js入门教程之计算属性
Sep 01 Javascript
PHP7新特性简述
Jun 11 Javascript
node文件上传功能简易实现代码
Jun 16 Javascript
React中使用collections时key的重要性详解
Aug 07 Javascript
react项目实践之webpack-dev-serve
Sep 14 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
Sep 21 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
Sep 02 Javascript
给原生html中添加水印遮罩层的实现示例
Apr 02 Javascript
代码解析React中setState同步和异步问题
Jun 03 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中文件上传的一个问题
2010/09/04 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
jQuery 加上最后自己的验证
2009/11/04 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
JSON相关知识汇总
2015/07/03 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
从零学Python之hello world
2014/05/21 Python
python3 读写文件换行符的方法
2018/04/09 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
学雷锋活动总结范文
2014/04/25 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
Python软件包安装的三种常见方法
2022/07/07 Python