如果我导入我的模块,我的服务不是单身,但如果我不这样做,我的控制器就不能工作

时间:2017-05-12 15:42:49

标签: angular angular2-routing angular2-services

我按如下方式设置了我的项目:

  • 应用
    • app.module(imports: []
    • 共享
      • shared.module(declarations: [sharedComponent], providers: [sharedService]
      • sharedService
      • sharedComponent
    • 模块1
      • module1.module(imports: [sharedModule]
      • module1.component(路由子使用sharedComponent)
    • 模块2
      • module2.module(imports: [sharedModule]
      • module2.component(路由子使用sharedComponent)

这不会抛出任何错误,但在sharedService构造函数中设置断点会显示它不是单例。

我可以将我的导入改为:

  • 应用
    • app.module(imports: [sharedModule]
    • 共享
      • shared.module(declarations: [sharedComponent], providers: [sharedService]
      • sharedService
      • sharedComponent
    • 模块1
      • module1.module(imports: []
      • module1.component(路由子使用sharedComponent)
    • 模块2
      • module2.module(imports: []
      • module2.component(路由子使用sharedComponent)

sharedService现在似乎是单身,但我收到错误

  

组件sharedComponent不是任何NgModule的一部分,或者该模块尚未导入您的模块

我希望我的共享服务是单例,但需要访问共享组件。我做错了什么?

1 个答案:

答案 0 :(得分:1)

对于遇到此问题的任何其他人,我对我的共享模块应包含的内容存在核心误解。 The docs say

  

使用组件,指令和管道创建 SharedModule   你在应用程序的任何地方使用。该模块应完全由   声明,大部分是导出的。

     

SharedModule可能会重新导出其他窗口小部件模块,例如   CommonModule,FormsModule和具有UI控件的模块   使用最广泛。

     

出于解释的原因,SharedModule不应该有提供商   先前。它的任何进口或再出口模块也不应该有   供应商。如果您偏离本指南,请了解您正在做的事情   为什么。

     

导入功能模块中的SharedModule,这两个模块都已加载   应用程序启动时以及稍后延迟加载的应用程序。

     

为您加载的单身人士服务提供提供商提供 CoreModule   当应用程序启动时。

     

仅在根AppModule中导入CoreModule。永远不要导入CoreModule   在任何其他模块中。

     

考虑使CoreModule成为没有的纯服务模块   声明。

将我的共享服务从SharedModule迁移到CoreModule是解决方案。