2016-10-17 107 views
10

我正在为我的项目使用mgechev的angular2种子。我在过去的6个月里一直在Angular2上工作(跟随所有RC到Final release的世界)。我坚持要求我的客户。我希望你们能帮忙。Angular2:没有路由和动态加载的延迟加载

这是问题所在。立足用户角色:

ROLE_ADMIN

ROLE_REVIEWER

的Web应用程序应该能够加载特定的模块和显示。再说了,

  • 如果用户角色ROLE_ADMIN然后加载angular2模块Module1 & Module2
  • 如果用户角色ROLE_REVIEWER然后加载angular2模块 Module1只。

当我说load时,它意味着它必须从服务器获取模块文件(与模块捆绑在一起的所有东西),注入Angular2应用程序并显示该模块。

因此,如果用户角色为ROLE_REVIEWER,我将只能看到Module1,这意味着Module2不应该从服务器获取。

编辑 这是困难的部分,url不会在更改时更改。将此模块视为加载在仪表板/dashboard上的小部件。因此,在加载这些模块时不需要更改URL。

希望我的问题足以说明问题。请建议我应该做什么或研究或研究来实现这一点。

我最好的猜测,我必须做到以下几点:

  • 条件懒加载(无路由)&然后,
  • 动态加载

但我不知道怎么办。

+1

您是否设法找到此问题的答案?我有同样的问题。 – IvanSt

+0

我现在知道它现在如何工作,但我无法成功建立原型。 – Savaratkar

+0

我用这个链接从我的想法︰https://github.com/mgechev/angular-seed/issues/1358 – Savaratkar

回答

0

您需要使用路由和延迟加载。 我使用的策略是根据角色动态配置路由器。 我希望这有助于

看完你的编辑

阅读你的编辑后,我的理解是,这个词“模块”你确定了一系列的持续显示或不依赖于角色的小部件。在这种情况下,您不需要路由和延迟加载。这只是一些条件逻辑,您可以使用* ngIf在“仪表板”组件的模板中进行编码。

我建议,不要在这个意义上使用“模块”这个词。 Module可以用于EC6或Angular2。 在第一种情况下,它与'进口'/'出口'概念有关。在第二种情况下,它与延迟加载和路由有关。

我希望这有助于

+0

hi @Picci url在加载这些模块时没有改变。我修改了我的问题。请看一看。 – Savaratkar

0
  1. 有作用,因为全局变量延迟加载
  2. 具有条件的决心

{ path: "dashboard", loadChildren:() => new Promise(function (resolve) { (require as any).ensure([], function (require: any) { if (ROLE === 'admin') resolve(require('./admin.module')['AdminModule']); if (ROLE === 'reviewer') resolve(require('./reviewer.module')['ReviewerModule']); resolve(require('./user.module')['UserModule']); //default module }); }) }

  • 导入模块1和module2到ADMIN模块和导入module1到ReviewerModule