如何判断Angular2模块是否可以导入共享模块

时间:2017-03-18 17:50:15

标签: angular

是否存在用于确定模块是提供者还是导出其他提供者模块的试金石;用于确定模块是否是在"共享"中列出的候选者。模块?

来自angular.io:

"由于前面解释的原因,SharedModule不应该有提供程序。任何进口或再出口的模块也不应该有供应商。如果您偏离本指南,请了解您正在做什么以及为什么。"

https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-module-recommendations

但是,如果我去使用模块,让我们说ReactiveFormsModule或RoutingModule,我如何确定它是否通过了上述测试?如果我只使用SharedModule中没有提供者或导入模块重新导出提供者的模块,那么肯定必须有一些方法来判断模块是否满足此要求。它是什么?

2 个答案:

答案 0 :(得分:2)

服务通常是具有应用范围的单身人士。

导入模块时,导入模块提供的服务将添加到主机模块的注入器中。通过在共享模块中提供服务,存在多个模块导入共享模块和创建服务的多个副本的真实危险,每个模块具有模块范围。如果您向SharedModule添加服务,请确保这是您的意图。

根据最佳实践,每个应用程序应该有一组Core模块。这些Core模块不是共享的(它应该只能由AppModule导入),因此在不破坏Singleton意图的情况下将服务添加到Core模块是安全的。

石蕊试验:

  

如果您想要在应用程序范围内共享的Singleton Services,那么   不要将它们放在 SharedModule 中,因为 SharedModules 可能是   从 相同 应用程序中的多个模块导入。代替   将它们放在 CoreModules 中,只应该由...导入   的AppModule。

请记住以下约定和指南:

  1. 每个应用程序只有一个AppModule
  2. AppModules可以导入其他模块
  3. 核心模块只能由AppModule
  4. 导入
  5. 任何模块(不仅仅是AppModule)都可以导入共享模块

答案 1 :(得分:1)

常见的做事方式如下图所示。

enter image description here

通常,如果提供程序的范围仅限于该特定模块,则它们始终列在相应模块的providers[]中,否则将其移至Root模块AppModule。