vue监听返回键

有这么一个应用场景,axios发送请求携带token,当后台检测到token过期(或者压根没有登录),返回相应的状态码。axios在响应拦截处判断状态码是不是以上情况,之后跳转到登录页面。

这里存在一个问题是:
a页面------>b页面 -------->生命周期函数(mounted)自动发起axios请求 ------>
返回token过期(未登录)------>直接跳转到 login页面 ------> 用户不登陆,并且点击了返回键(这个时候就出现了bug)----->返回b页面 -------->生命周期函数(mounted)自动发起axios请求 ------>
返回token过期(未登录)------>直接跳转到 login页面 ------>。。。。。。。。。。。。。
这个时候,用户已经陷入死循环,不能返回。

解决思路:监听物理返回键,之后回退两个页面,即router.go(-2) (普通返回就是router.go(-1))

上代码

1、挂载完成后,判断浏览器是否支持popstate

mounted(){
  if (window.history && window.history.pushState) {
    history.pushState(null, null, document.URL);
    window.addEventListener('popstate', this.fun, false);//false阻止默认事件
  }
},

2、页面销毁时,取消监听。否则其他vue路由页面也会被监听

destroyed(){
  window.removeEventListener('popstate', this.fun, false);//false阻止默认事件
},

3、将监听操作写在methods里面,removeEventListener取消监听内容必须跟开启监听保持一致,所以函数拿到methods里面写

methods:{
  fun(){
    console.log("监听到了");
    //回退两个页面
    this.$router.go(-2);
  }
}```

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值