来自其他功能模块的Angular 2导入服务

时间:2016-12-02 16:18:49

标签: angular module angular2-services

上下文

假设我有一个Angular 2功能模块Movies和一个功能模块DashboardMovie模块具有由movies.service模块公开/提供的服务Movies

现在Dashboard模块中的一个组件也想使用此服务来显示电影的子集。

问题

您是否只需导入该组件中的服务并使用该服务,有效地使Dashboard模块依赖于Movies模块,或者您应该将服务移至Shared模块并在两个功能模块中导入它?

依赖于另一个功能模块的功能模块对我来说有点奇怪,但如果您通过每个功能模块中的Shared模块导入服务,则不会将服务实例化两次,每次导入一次?

那么你可以将它添加到核心模块以确保它只导入一次..但它不是核心服务,所以感觉更奇怪!

Arg,我觉得我正在创造一个不存在的问题..有人可以解开我的大脑吗... thx:P

1 个答案:

答案 0 :(得分:2)

我会把movie.service放到movie.module中。如果该模块未延迟加载,则可注入服务可用于其他模块。使用延迟加载会使事情变得复杂,因为会创建一个新的注入上下文。

但是如果您决定将您的服务放入sharedModule,它也应该可以工作,但这很危险。您一次不会有两个服务实例,因为根注入器将始终采用最后一个初始化的实例,除非有一个延迟加载模块导入此共享模块。

有角度的stlye指南告诉我,将单例服务的实例分配给CoreModule中的整个应用程序。

有关更多信息,请阅读角度样式指南:https://angular.io/styleguide#!#04-11