0

我有一个名为 的核心模块CoreModule,它包含一个名为 的MapManagerService服务、一个FlyToDirective使用.MapManagerServiceElementComponentflyTo

我的AppModule进口CoreModule和使用它的组件,加上有它自己的MapManagerService

阅读 Angular 的核心模块文档,你会注意到:

更准确地说,Angular 在添加 @NgModule.providers 中列出的项目之前会累积所有导入的提供程序。此顺序确保我们显式添加到 AppModule 提供程序的任何内容优先于导入模块的提供程序。

但是,FlyToDirective仍然使用导入CoreModule的 's MapManagerService,我的文档有误吗?

我认为应该使用的服务是AppModulesMapManagerService而不是CoreModules

任何帮助将不胜感激,谢谢。

4

1 回答 1

0

添加到providers: [...]非延迟加载模块的所有提供程序都被提升到应用程序根范围内。在多个这样的模块中注册了相同的提供者,只有最后导入的一个生效。

但是,直接添加的提供者AppModule优先于导入模块的提供者。

然后,您可以添加一个提供程序@Component({providers: [...]}),组件及其后代从该提供程序而不是应用程序根范围的提供程序获取实例。

或者,您可以使模块延迟加载。延迟加载的模块在此模块中获取自己的根范围以及组件和服务,而不是来自此提供程序的实例。

于 2017-02-13T09:04:13.627 回答