Vue & window.history
router.go(n) :
该方法的参数 n 为一个整数,意思是在 history 记录中向前或者向后退多少步。这里来打印一下 window对象:
作为 js顶级DOM对象的 window 里有一个属性,叫做
history,该属性的原型上拥有一个 go 方法:
现在关于 vue.routers 的应用,或许大家能够想到他的实现自然是离不开 history属性的,有些时候能慢慢理解一些这种东西,大概也是一种乐趣。
router.push(location) :
想要导航到不同的 url,
那么可以使用 router.push 的方法,这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器的后退按钮时,是会回到之前的 url的,对栈区有过了解的同学应该知道这个道理。
router.replace(location) :
和 router.push 很像,唯一不同的就是,它不会向 history 添加新纪录,而是和他的方法名一样,替换掉当前的 history 记录。
router.push(location) : 和 router.replace(location)的区别:
童鞋们可以考虑把 路由 router 想象成一个访问记录的栈。一般情况下,要做前进后退的浏览器记录管理的,基本都是使用 router.push( ), 但是,也有一些特殊情况需要用到 router.replace( ).
举个例子:
我们从业务逻辑上分析一下以下,
有一个授权页面,用户在按流程操作时,某一步需要授权,首先跳到授权页,授权页提交授权请求,成功授权后,跳入流程中的下一步操作地址。此时使用 replace再合适不过,从而防止用户跳到下一步流程后由于点击了后退按钮退到授权页,从而导致反复授权,提交请求。