上下文
假设我有一个Angular 2功能模块Movies
和一个功能模块Dashboard
。
Movie
模块具有由movies.service
模块公开/提供的服务Movies
。
现在Dashboard
模块中的一个组件也想使用此服务来显示电影的子集。
问题
您是否只需导入该组件中的服务并使用该服务,有效地使Dashboard
模块依赖于Movies
模块,或者您应该将服务移至Shared
模块并在两个功能模块中导入它?
依赖于另一个功能模块的功能模块对我来说有点奇怪,但如果您通过每个功能模块中的Shared
模块导入服务,则不会将服务实例化两次,每次导入一次?
那么你可以将它添加到核心模块以确保它只导入一次..但它不是核心服务,所以感觉更奇怪!
Arg,我觉得我正在创造一个不存在的问题..有人可以解开我的大脑吗... thx:P
答案 0 :(得分:2)
我会把movie.service放到movie.module中。如果该模块未延迟加载,则可注入服务可用于其他模块。使用延迟加载会使事情变得复杂,因为会创建一个新的注入上下文。
但是如果您决定将您的服务放入sharedModule,它也应该可以工作,但这很危险。您一次不会有两个服务实例,因为根注入器将始终采用最后一个初始化的实例,除非有一个延迟加载模块导入此共享模块。
有角度的stlye指南告诉我,将单例服务的实例分配给CoreModule中的整个应用程序。
有关更多信息,请阅读角度样式指南:https://angular.io/styleguide#!#04-11