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

Jos*_*gis 5 service angular

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

\n\n
\n

当在应用程序启动时加载模块时,其 @NgModule.providers\n 具有应用程序范围的作用域。它们可在整个应用程序中进行注入。

\n\n

如果可以的话,延迟加载模块。Angular\n 为延迟加载模块提供了自己的子注入器。该模块的提供程序仅在使用该注入器创建的组件树中可见。

\n\n

如果您必须在应用程序启动时立即加载模块,\n 请改为在组件中提供服务。

\n
\n\n

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

\n\n

另一方面,文档中的另一部分另有说明,为了隔离服务,我们只需将其添加到模块的提供者数组中,然后将其隔离到该特定功能模块。

\n\n
\n

在危机中心域之外,既不需要也不想要 CrisisService。我们没有将其注册到 AppModule 的提供程序 \xe2\x80\x94 中,使其在任何地方都可见 \xe2\x80\x94,而是在 CrisisCenterModule 提供程序数组中注册\n CrisisService。

\n\n

这将 CrisisService 的范围限制为危机中心路由。危机中心之外的任何模块都无法访问它。

\n
\n\n

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

\n\n

哪个概念是正确的?

\n

qui*_*dev 2

这两个概念都是对的。在 NgModule 中定义服务会使您可以将该服务作为单例使用。

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