嗨,我刚刚在角度2,我试图把我在angular.io学到的所有东西都放在一起。 问题是我已经了解了核心模块,服务,注射剂......和
如果我让我们说这样的核心模块:
import { NgModule } from '@angular/core';
import { LoggerService } from './services/logger.service';
@NgModule({
exports: [
//components
LoggerComponent,
],
declarations: [LoggerComponent],
providers: [LoggerService],
})
export class CoreModule { }
和一个简单的app.module如:
import { CoreModule } from './core/core.module';
import { AppComponent } from './app.component';
@NgModule({
imports: [
CoreModule,
BrowserModule,
HttpModule,
routerModule,
],
declarations: [
AppComponent,
],
providers: [],
bootstrap: [AppComponent],
})
export class AppModule { }
如何使用为核心模块导出的LoggerService服务?我必须
import {LoggerService} from './core/services';
在我的app.component中?因为在app.component的构造函数中它不起作用
constructor(logger: LoggerService){}
我错过了什么?谢谢!
答案 0 :(得分:0)
来自ngModule
documentation
providers:Provider []定义可注入对象集 可在此模块的进样器中使用。
换句话说,提供商将是模块的内部,而不是外部暴露。文档中的进一步阅读表明,只有指令/管道/(组件)适用于导出/声明。
因此,要解决此问题,您需要直接引用更高级别模块中的服务,请注意,它将正确使用核心模块中的单一实例化服务,这非常酷并且打破我的期望。
<强> app.module.ts 强>
import {LoggerService} from './core/services';
@NgModule({<...>, providers: [<...>, LoggerService]})<...>
如果您要使用一堆共享服务,而不是使用 barrel ,那么列出所有这些服务并进行一次导入将是一种合理的方法。
这是功能demo