Angular 2如何隔离功能模块中的服务提供者

时间:2016-10-03 09:20:54

标签: angular service

这在文档中非常混乱,因为有一部分建议在模块提供者数组中加载服务将使整个应用程序可用,如果我们需要隔离此服务,唯一的方法是将其包含在提供者中。顶级父组件而不是功能模块提供者。

  

在应用程序启动时加载模块时,其@NgModule.providers   具有应用范围。它们可用于注射   在整个申请过程中。

     

如果可以的话,懒洋洋地加载模块。角   为懒惰加载的模块提供了自己的子注入器。该模块   提供程序仅在使用此创建的组件树中可见   喷射器。

     

如果您必须急切地加载模块,那么当应用程序启动时,   而是在组件中提供服务。

https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-component-scoped-providers

另一方面,文档中还有另一部分说不然,为了隔离服务,我们可以将它添加到模块的提供者数组中,并将其隔离到这个特定的功能模块。

  

在危机之外既不需要也不想要危机服务   中心域名。而不是使用AppModule注册它   提供商 - 让它随处可见 - 我们注册了   CrisisCenterModule提供程序阵列中的CrisisService。

     

这将危机服务的范围限制在危机中心   路线。危机中心以外的任何模块都无法访问它。

https://angular.io/docs/ts/latest/guide/router.html#!#child-routing-component

哪个概念是正确的?

1 个答案:

答案 0 :(得分:2)

这两个概念都是正确的。在NgModule中定义服务会导致您可以将该服务用作单例。

但是如果将服务定义为独立组件,angular将创建该服务的新实例。