Angular 2 - 在服务中包含提供者

时间:2016-04-06 17:13:03

标签: angularjs angular angular2-services

我将服务作为提供程序加载到组件中。此服务可能使用Http返回数据,也可能不返回,组件不应该关心。但是,如果加载的服务使用Http,则组件本身似乎必须包含HTTP_PROVIDERS。这打破了关注点的分离。我误解了什么?

2 个答案:

答案 0 :(得分:2)

事实上,最好在引导您的应用程序时指定HTTP_PROVIDERS

bootstrap(AppComponent, [ HTTP_PROVIDERS ]);

但我同意你的观点,即只对组件提供配置文件会产生一些影响。

之前的配置可以使用分层注入器。

有关分层注入器的更多详细信息,请参阅此问题:

答案 1 :(得分:2)

  

这打破了关注点的分离。我误解了什么?

为了支持实例化服务的多个实例(即,所有服务都不必是单例),Angular应用程序需要一种方法来指定多个注入器(不仅仅是一个)。需要在某种层次结构中创建和配置这些注入器。组件/指令树,因为它是树,已经有一个层次结构。因此Angular使用(现有)组件树来配置依赖注入。我喜欢把它想象成一个稀疏的注入树"覆盖组件树。

我认为为服务定义一个单独的层次结构会有更多的工作 - 作为开发人员,我们可能需要定义和配置某种类型的另一个注入树。

因此,不要将其视为"组件需要知道服务的依赖性" (当这样说时,它听起来像是我们打破了关注点的分离),我更喜欢把它想象如下:"当我写一个Angular应用程序时,我必须配置我的注入器树的提供者/依赖关系" ...并且由于注入器树覆盖了组件树,我使用组件来配置它。

但这并不理想,因为如果您想在不同的应用程序中重用组件,则可能需要更改providers数组(即,您可能需要重新配置进程树)。