vuex 配合 vue-router 在路由跳转前获取用户ID

目前的H5项目是内置在某第三方App里的,用户进入我们的H5,需要先访问一个借口(比如:getUserId)获取用户在我们服务器上的ID,再通过这个ID获取用户的数据,比如用户写的文章。

用户ID存储在vuex中

请问怎么在路由跳转前先获取用户ID 再跳转路由呢

我想到的有以下方法,但是获取之后怎么存储到 store 中呢?

router.beforeEach(transition => {
    // 访问接口获取用户ID
    getUserId().then(res => {
        transition.next();
    });
});

另一个方法是在 App.vue 根组件中获取,这样可以存储进 store ,但是此时路由已经跳转了,会导致页面打开的一刻获取不到数据.

ready() {
    getUserId().then(res => {
        // 显示 <router-view></router-view>
        this.loadingRouteData = false;
    });
}

所以怎么样先获取用户ID, 存储到 store 里面,再跳转路由呢?

阅读 10.5k
2 个回答

感谢大家的查看,感谢阿发的指导,
vue-router 里面可以通过 router.app 引用根组件,改成下面这样就可以了。
userId 存在 store 里面,getUserId 是一个 action

  router.beforeEach(transition => {
    if(router.app.userId) {
      transition.next();
    } else {
      router.app.getUserId().then(() => {
        transition.next();
      });
    }
  });

试试这个

  beforeRouteEnter(to, from, next){
      next(vm=>{
        console.log(vm.testData)
        vm..$store.dispatch('xxx','data yyy')
      })
  }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题