vue通过beforeEach从首页跳转到注册页面后,点击返回会再次进入首页?

需求是进入首页,通过uid判断是否用户为会员,如果不是会员,则跳转到注册页面,但是有个问题就是跳转到注册页面后点击返回按钮,就会跳转到上一页面也就是首页(然后由于不是会员就停留在了注册页),按逻辑页也应该是无限循环啊,实际上,我要点击两次返回按钮才能退出注册页。困扰我多时,往有人能帮解答,不胜感激!

进入首页memberCenter后,输出
to memberCenter
to register

第一次点击返回按钮,输出,并停留在注册页面
to memberCenter

第二次点击返回按钮,退出注册页面(即退出微信公众号,但跟微信无关,其他浏览器也有这个问题)

代码

router.beforeEach(async (to, from, next) => {
  console.log('to', to.name);
  Indicator.open('努力加载中...');

  // 注册时进入会员中心会请求会员中心接口,注册后需要更新会员中心接口
  if (to.path === '/memberCenter') {
    // 会员中心数据为空
    if (!store.state.memberCenterData) {
      await store.dispatch('getMemberCenterAction');
    }

    Vue.prototype.$nextTick(() => {
      Indicator.close();
    });

    if (store.state.memberCenterData.uid) {
      next({
        path: '/register',
      });
      return;
    }
  }
  next();
});

补充:
另外在首页(也就是会员中心)通过beforeRouteEnter里的next({name: 'register'})跳转到注册页,在注册点击返回也会返回到上一页,好像全局的beforeEach和组件的beforeRouteEnter里的next()作用都变成了router.push(),而我想要是类似router.replace()的效果

阅读 4.6k
1 个回答

没遇到过需要点击两次才能到首页的情况。
不过要实现需要还是容易的,只要判断是注册页到主页的跳转就直接next(),这满足你的需求。

  if (to.path === '/memberCenter') {
    // 会员中心数据为空
    if(from.path==='/register'){
      next();
      return;
     }else{
     ...
     }
  }

你这钩子是不会无限跳转的,因为你没有写to.name=='/register'的钩子

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题