使用app.component中核心模块的服务

时间:2016-12-15 19:34:30

标签: angular injectable

嗨,我刚刚在角度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){}
我错过了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

来自ngModule documentation

  

providers:Provider []定义可注入对象集   可在此模块的进样器中使用。

换句话说,提供商将是模块的内部,而不是外部暴露。文档中的进一步阅读表明,只有指令/管道/(组件)适用于导出/声明。

因此,要解决此问题,您需要直接引用更高级别模块中的服务,请注意,它将正确使用核心模块中的单一实例化服务,这非常酷并且打破我的期望。

<强> app.module.ts

import {LoggerService} from './core/services';

@NgModule({<...>, providers: [<...>, LoggerService]})<...>

如果您要使用一堆共享服务,而不是使用 barrel ,那么列出所有这些服务并进行一次导入将是一种合理的方法。

这是功能demo