如何共享服务 - NgModule - Angular2
How to share services - NgModule - Angular2
我知道在 Angular2 中,一个模块提供的服务对其他模块是可用的,而且应该只提供一次。
我有一个延迟加载的 MessengerModule,它导入了一个 MessengerService。我还有一个 HeaderModule,它只需要此服务来更新消息通知。
我看到两种方式:
- 在 AppModule 级别提供 MessengerService
- 在 MessengerModule 中提供 MessengerService。在 HeaderModule 中导入 MessengerModule。
在 1 中,"break" MessengerModule 删除其逻辑服务很烦人。
在 2 中,我将失去 MessengerModule 的延迟加载功能,该功能非常大。由于 HeaderModule 是预加载的,所以 Messenger 也是如此吧?
看来最好的选择是在主层提供服务。你有哪些建议?
你应该阅读 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 {}
Since SharedModule only consists of a service that Angular registers
in the root app injector, we do not need to import it in LazyModule.
This is because the lazy loaded module will already have access to
services defined at the root level.
我知道在 Angular2 中,一个模块提供的服务对其他模块是可用的,而且应该只提供一次。
我有一个延迟加载的 MessengerModule,它导入了一个 MessengerService。我还有一个 HeaderModule,它只需要此服务来更新消息通知。
我看到两种方式:
- 在 AppModule 级别提供 MessengerService
- 在 MessengerModule 中提供 MessengerService。在 HeaderModule 中导入 MessengerModule。
在 1 中,"break" MessengerModule 删除其逻辑服务很烦人。 在 2 中,我将失去 MessengerModule 的延迟加载功能,该功能非常大。由于 HeaderModule 是预加载的,所以 Messenger 也是如此吧?
看来最好的选择是在主层提供服务。你有哪些建议?
你应该阅读 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 {}
Since SharedModule only consists of a service that Angular registers in the root app injector, we do not need to import it in LazyModule. This is because the lazy loaded module will already have access to services defined at the root level.