如何优化这个vue父子视图/组件异步控制方案

技术栈:vue全家桶(vue 2.x)

背景:
父子视图,访问/的时候,异步加载

//视图层级:
<Root>
    <App>
        <Home>
            <Components>
//路由配置如下:
const router = new Router({
    routes: [
        {
            path: '/',
            component: resolve => require(['Home.vue'], resolve),
            children:[
                {
                    path: '',
                    component: resolve => require(['components/Rock.vue'], resolve)
                },
                {
                    path: 'rock',
                    component: resolve => require(['components/HipPop.vue'], resolve)
                },
                ...
            ]
          }
      ]
  })

父视图挂载之后,会发送请求向后端获取一个关键数据userId
子视图挂载之后,会执行鉴权函数,通过之后就可以进行后续操作,鉴权函数需要依赖用户id

遇到的问题
第一次加载时,父视图还没获取到userId,而子视图已经开始执行鉴权函数了

自己的探索
方案一:把路由的加载模式改为同步模式。
治标不治本,父组件在获取的数据的时候,会存在延迟的情况,也就不能避免子组件挂载之后执行函数

方案二:依然是异步路由加载。

  1. userId存到Vuex
  2. 当父组件获取到userId的时候,写到Vuex里
  3. 子组件,watch Vuex的userId,如果有变动,就去执行鉴权函数
  4. 因为考虑到后续切换子组件,所以mounted钩子也要去执行鉴权函数

请教
有咩有其他比价好的方案?

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