【问题标题】:How to share services - NgModule - Angular2如何共享服务 - NgModule - Angular2
【发布时间】:2018-01-04 19:09:28
【问题描述】:

我知道在 Angular2 中,一个模块提供的服务对其他模块可用,并且应该只提供一次。

我有一个延迟加载的 MessengerModule,它导入了一个 MessengerService。我还有一个 HeaderModule,它只需要这个服务来更新消息通知。

我看到了两种方式:

  1. 在 AppModule 级别提供 MessengerService
  2. 在 MessengerModule 中提供 MessengerService。在 HeaderModule 中导入 MessengerModule。

在 1 中,通过删除 MessengerModule 的逻辑服务来“破坏”它是很烦人的。 2、我会失去MessengerModule的懒加载特性,这个特性是相当大的。由于 HeaderModule 是预先加载的,所以 Messenger 也一样,对吗?

似乎最好的选择是在主级别提供服务。你有哪些建议?

【问题讨论】:

标签: angular angular-services


【解决方案1】:

您应该阅读this 文章。

它涉及: app/shared/shared.module.ts

import { NgModule, ModuleWithProviders } from '@angular/core';
import { CounterService } from './counter.service';

@NgModule({})
export class SharedModule {
  static forRoot(): ModuleWithProvider`enter code here`s {
    return {
      ngModule: SharedModule,
      providers: [CounterService]
    };
  }
}

app/app.module.ts

import { SharedModule } from './shared/shared.module';

@NgModule({
  imports: [
    SharedModule.forRoot(),
    ...
  ],
  ...
})
export class AppModule {}

由于 SharedModule 仅包含 Angular 注册的服务 在根应用程序注入器中,我们不需要在 LazyModule 中导入它。 这是因为延迟加载的模块已经可以访问 在根级别定义的服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 2020-11-29
    • 2017-01-04
    相关资源
    最近更新 更多