Umi: 能不能在运行之后再动态从服务器获取路由进行更新?

Created on 1 Jun 2019  ·  7Comments  ·  Source: umijs/umi

运行后更新路由

我的项目是需要登陆后,通过服务器返回的路由列表修改路由,无法再运行时就更新路由。
第一:能不能在model中或者运行后更新routes呢,再重新渲染界面?
第二:动态增加路由时,component是路径, 通过import函数无法加载组件,报错显示 cannot find module。

FAQ

Most helpful comment

@sorrycc 谢谢你的回复,我已经想到办法了.我将我的思路写出来希望能帮到需要的人

1.我把oldRender作为全局变量存放起来,第一次调用oldRender,当登录后我在重新调用oldRender()更新路由,实现了渲染后更新路由

export function render(oldRender) {
  //设置默认oldRender();
  window.oldRender = (routes) => {
    authRoutes = routes;
    console.log('触发render');
    oldRender();
  };
  if (window.oldRender) {
    window.oldRender();
  }

2.利用第一个问题,结合patchRoutes就可以更新

3.我先将在路由中写一个临时挂载的路由,设置一个key用户找到它,在patchRoutes中获取组件,再删除挂载的临时路由

{
    path: '/',
    name: '临时挂载点',
    routeKey: 'tmp',
    routes: [
        ....
   ]
  },

All 7 comments

  1. 路由不能在渲染后动态更新
  2. 渲染前可以更新,得结合 app.js 的 patchRoutes 来做
  3. 路由指向的 component 是个麻烦的点,得想办法让他提前构建好,然后通过某种方式(比如全局变量)传给 patchRoutes

@sorrycc 谢谢你的回复,我已经想到办法了.我将我的思路写出来希望能帮到需要的人

1.我把oldRender作为全局变量存放起来,第一次调用oldRender,当登录后我在重新调用oldRender()更新路由,实现了渲染后更新路由

export function render(oldRender) {
  //设置默认oldRender();
  window.oldRender = (routes) => {
    authRoutes = routes;
    console.log('触发render');
    oldRender();
  };
  if (window.oldRender) {
    window.oldRender();
  }

2.利用第一个问题,结合patchRoutes就可以更新

3.我先将在路由中写一个临时挂载的路由,设置一个key用户找到它,在patchRoutes中获取组件,再删除挂载的临时路由

{
    path: '/',
    name: '临时挂载点',
    routeKey: 'tmp',
    routes: [
        ....
   ]
  },
authRoutes = routes

这一步没看懂,authRoutes 不是一个方法么?

@sorrycc 谢谢你的回复,我已经想到办法了.我将我的思路写出来希望能帮到需要的人

1.我把oldRender作为全局变量存放起来,第一次调用oldRender,当登录后我在重新调用oldRender()更新路由,实现了渲染后更新路由

export function render(oldRender) {
  //设置默认oldRender();
  window.oldRender = (routes) => {
    authRoutes = routes;
    console.log('触发render');
    oldRender();
  };
  if (window.oldRender) {
    window.oldRender();
  }

2.利用第一个问题,结合patchRoutes就可以更新

3.我先将在路由中写一个临时挂载的路由,设置一个key用户找到它,在patchRoutes中获取组件,再删除挂载的临时路由

{
    path: '/',
    name: '临时挂载点',
    routeKey: 'tmp',
    routes: [
        ....
   ]
  },

不能不能贴一段这段实现的完整代码

@sorrycc 谢谢你的回复,我已经想到办法了.我将我的思路写出来希望能帮到需要的人

1.我把oldRender作为全局变量存放起来,第一次调用oldRender,当登录后我在重新调用oldRender()更新路由,实现了渲染后更新路由

export function render(oldRender) {
  //设置默认oldRender();
  window.oldRender = (routes) => {
    authRoutes = routes;
    console.log('触发render');
    oldRender();
  };
  if (window.oldRender) {
    window.oldRender();
  }

2.利用第一个问题,结合patchRoutes就可以更新

3.我先将在路由中写一个临时挂载的路由,设置一个key用户找到它,在patchRoutes中获取组件,再删除挂载的临时路由

{
    path: '/',
    name: '临时挂载点',
    routeKey: 'tmp',
    routes: [
        ....
   ]
  },

如果全局定义window.render我在尝试的时候发现似乎不行

我也解决了 虽然不太好 但是感觉还行

我也解决了 虽然不太好 但是感觉还行

咋解决的啊,我用上面的方法,登录后render,patchRoutes并不会触发

Was this page helpful?
0 / 5 - 0 ratings

Related issues

stoneWeb picture stoneWeb  ·  3Comments

afc163 picture afc163  ·  3Comments

miaojinxing picture miaojinxing  ·  3Comments

liuxinqiong picture liuxinqiong  ·  3Comments

sorrycc picture sorrycc  ·  4Comments