Vue.js最佳实践--VueRouter的beforeEnter与beforeRouteLeave冲突解决
用Vue做应用管理系统,通常会在离开某个页面的时候,需要检测用户是否有修改,询问用户需要不需要保存之类的需求
这时候,在读VueRouter文档:组件内的守卫 的时候,发现beforeRouteLeave,这个离开守卫通常用来禁止用户在还未保存修改前突然离开。该导航可以通过 next(false) 来取消。这个不正是为我们这个需求量身定制的功能嘛!!!
Vue+VueRouter很赞,当初选他没错,哈哈哈!!!
可是在实际使用的时候发现,beforeRouteLeave这个守卫被触发了两次,为什么呢?
调查发现有的模块在跳转前,会有根据登录情况的判断进入的模块,例如配置路由时:
path: '/home',
name: 'home',
beforeEnter(routeTo, routeFrom, next) {
// If the user is already logged in
if (store.getters['auth/loggedIn']) {
next({ name: 'xx' })
} else<span> {
// Redirect to login instead
next({ name: 'login' })
}
},
beforeEnter中进行了跳转,这样路由发生了两次变化,beforeRouteLeave被触发了两次,这是不是VueRouter的bug?
解决方案呢?再读文档,重定向,并且文中特意指出,注意导航守卫并没有应用在跳转路由上,而仅仅应用在其目标上。这不正是我期待的效果嘛!
于是,修改后的代码,这样组件内的beforeRouteLeave就不会被触发两次了
path: '/home',
name: 'home',
redirect: to => {
if (store.getters['auth/loggedIn']) {
// Redirect to xx instead
return '/xx'
} else {
// Redirect to login instead
return '/login'
}
},
Vue.js最佳实践--VueRouter的beforeEnter与beforeRouteLeave冲突解决的更多相关文章
- Vue.js最佳实践
Vue.js最佳实践 第一招:化繁为简的Watchers 场景还原: created(){ this.fetchPostList() }, watch: { searchInputValue(){ t ...
- Vue.js最佳实践--给大量子孙组件传值(provide/inject)
开发中有个需求,有个Parent组件(例如div)下,输入框,下拉框,radiobutton等可编辑的子孙组件几百个,根据某个值统一控制Parent下面的所有控件的disabled状态 类似于这样,给 ...
- Vue.js最佳实践(五招让你成为Vue.js大师)
对大部分人来说,掌握Vue.js基本的几个API后就已经能够正常地开发前端网站.但如果你想更加高效地使用Vue来开发,成为Vue.js大师,那下面我要传授的这五招你一定得认真学习一下了. 第一招:化繁 ...
- Vue.js最佳实践(五招助你成为vuejs大师)
转自https://www.jb51.net/article/139448.htm 本文面向对象是有一定Vue.js编程经验的开发者.如果有人需要Vue.js入门系列的文章可以在评论区告诉我,有空就给 ...
- JavaScript best practices JS最佳实践
JavaScript best practices JS最佳实践 0 简介 最佳实践起初比较棘手,但最终会让你发现这是非常明智之举. 1.合理命名方法及变量名,简洁且可读 var someItem = ...
- require.js 最佳实践【转】
https://www.cnblogs.com/digdeep/p/4607131.html require.js是一个js库,相关的基础知识,前面转载了两篇博文:Javascript模块化编程(re ...
- require.js 最佳实践
require.js是一个js库,相关的基础知识,前面转载了两篇博文:Javascript模块化编程(require.js), Javascript模块化工具require.js教程,RequireJ ...
- vue.js 中使用(...)运算符报错的解决方法
vue.js 中使用(...)运算符报错的解决方法 Syntax Error:Unexpected token(XX:X) }, computed:{ ...mapGetters([ 'pageSiz ...
- Vue 工程化最佳实践
目录结构 总览 api 目录用于存放 api 请求,文件名与模型名称基本一致,文件名使用小驼峰,方法名称与后端 restful 控制器一致. enums 目录存放 常量,与后端的常量目录对应 ...
随机推荐
- 吴丽丽-201871010123《面向对象程序设计(Java)》第七周学习总结
吴丽丽-201871010123<面向对象程序设计(Java)>第七周学习总结 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个 ...
- 杂项-FLAG
题目 最低位隐写 50 4B 03 04 压缩格式zip的文件头 save bin 保存成zip格式 解压(WinRAR不能正常解压) 然后用vim打开(winhex也可以) hctf{dd0gf4c ...
- pom.xml文件说明(八)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- SGD的动量(Momentum)算法
引入动量(Momentum)方法一方面是为了解决“峡谷”和“鞍点”问题:一方面也可以用于SGD 加速,特别是针对高曲率.小幅但是方向一致的梯度. 如果把原始的 SGD 想象成一个纸团在重力作用向下滚动 ...
- webapi跨域实现(CROS、JSONP)
CROS: /// <summary> /// 支持WebAPI服务器端跨域 /// </summary> public class ServerCrossDomainAttr ...
- The 2019 China Collegiate Programming Contest Harbin Site
题解: https://files.cnblogs.com/files/clrs97/HarbinEditorialV2.zip Code: A. Artful Paintings /* let x= ...
- Linux学习笔记-第4天- linux命令有很多,不要求全会,常用的一定要能够熟练使用
linux命令就像单词,有很多.词汇量固然越大越好,但是常用基础命令一定要做到熟练应用. 同时学习不是死记硬背,排错能力同等重要,要理解其命令背后的运行机制,这样才能在翻车时 及时救场.
- <Array> 274 275
274. H-Index 这道题让我们求H指数,这个质数是用来衡量研究人员的学术水平的质数,定义为一个人的学术文章有n篇分别被引用了n次,那么H指数就是n. 用桶排序,按引用数从后往前计算论文数量,当 ...
- coreml之通过URL加载模型
在xcode中使用mlmodel模型,之前说的最简单的方法是将模型拖进工程中即可,xcode会自动生成有关模型的前向预测接口,这种方式非常简单,但是更新模型就很不方便. 今天说下另外一种通过URL加载 ...
- [LeetCode] 344. Reverse String 翻转字符串
Write a function that reverses a string. The input string is given as an array of characters char[]. ...