Javascript 在Angular 5中,基于HTTP响应有条件地延迟加载模块

Javascript 在Angular 5中,基于HTTP响应有条件地延迟加载模块,javascript,angular,angular-ui-router,Javascript,Angular,Angular Ui Router,我有两个角色:管理员和用户。如果userId属于admin,我必须加载admin页面;如果userId属于user,我必须加载user页面 URL类似于http://example.net/[用户id] 我是否可以根据得到的http响应以角度路由延迟加载模块?我点击API并传递用户Id并获得用户角色,然后我必须加载延迟加载其模块。这是不可能的。但是,您可以在:user\u id路由上的守卫中执行重定向: export class UserRoleResolve implements CanAct

我有两个角色:管理员和用户。如果userId属于admin,我必须加载admin页面;如果userId属于user,我必须加载user页面

URL类似于
http://example.net/[用户id]


我是否可以根据得到的http响应以角度路由延迟加载模块?我点击API并传递用户Id并获得用户角色,然后我必须加载延迟加载其模块。

这是不可能的。但是,您可以在
:user\u id
路由上的守卫中执行重定向:

export class UserRoleResolve implements CanActivate {

  constructor(private router: Router) {}

  public async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {
     const userId: string = route.params.user_id;
     const role: string = await this.getRoleFromUser(userId);

     if (role === 'admin') {
       this.router.navigateByUrl(`/admin/${userId}`);
     } else if (role === 'user') {
       this.router.navigateByUrl(`/user/${userId}`);
     }
  }
}
导出类UserRoleResolve实现可激活{
构造函数(专用路由器:路由器){}
公共异步canActivate(路由:ActivatedRouteSnapshot):承诺{
const userId:string=route.params.user\u id;
const role:string=wait this.getRoleFromUser(userId);
如果(角色=='admin'){
this.router.navigateByUrl(`/admin/${userId}`);
}else if(角色==='user'){
this.router.navigateByUrl(`/user/${userId}`);
}
}
}

您可以通过以下方法解决问题:预加载策略

看看是否有帮助。。我已将此纳入工作申请中。。这是非常有用的,请阅读-总结是,这不是一个理想的方式来解决志愿者,可能是反作用,以获得答案。请不要将此添加到您的问题中。谢谢您的解决方案。你能解释一下你将如何定义这些函数吗。const role:string=wait this.getRoleFromUser(userId);您使用了wait关键字。它将返回什么?可观察到的?对不起。我已经更新了我的答案。好像我把决心和行动搞混了。无论如何,通过使用
await/async
可以得到更干净的代码。但只有当你使用承诺的时候。如何从用户处获得角色的实现取决于您。我只是举个例子:)