Angular 5 - 限制对模块的服务

时间:2018-05-28 07:20:09

标签: angular angular-services

我有两个模块 - 让我们称它们为模块-E和模块-P。我在module-E中有一个服务,比如service-E,它有多种方法。我想在模块-P中使用service-E的所有功能,除了一些函数,所以我从service-E扩展了service-P并在服务-P中覆盖了这些函数。

在模块-E中,提供者声明是

providers: [service-E]

在模块-P中,提供者声明是

providers: [{provide: service-E, useClass: servie-P}]

问题是如果我首先加载module-P,我甚至在模块E中得到service-P,如果我首先加载module-E,那么我在模块-P中获得service-E。

无论如何,我想将service-P限制为module-P,将service-E限制为module-E.

3 个答案:

答案 0 :(得分:0)

为什么不使用模块?

@NgModule({
  providers: [serviceE]
})
export class ServiceEModule {}

@NgModule({
  imports: [ServiceEModule],
})
export class PModule {}

您甚至不必使用此逻辑声明两次,所有业务逻辑都是集中的。

答案 1 :(得分:0)

您无法限制它们,因为所有服务共享同一个注入器,因此无论何时加载服务(例如从延迟加载的模块),该服务都将全局可用。

来源:https://medium.com/@michelestieven/organizing-angular-applications-f0510761d65a

答案 2 :(得分:0)

模块中提供的服务已在根注入器中注册。因此,您获得的第一个实例将在整个应用程序中共享。

但是,如果模块是延迟加载的,它们将为每个模块都有一个单独的实例。

参考:https://angular.io/guide/dependency-injection#injectable-ngmodule-or-component