0

嗨,我是 angular 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){}

我错过了什么?谢谢!

4

1 回答 1

0

ngModule 文档

providers : Provider[] 定义了该模块的注入器中可用的可注入对象集。

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

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

app.module.ts

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

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

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

这是功能演示

于 2016-12-15T20:15:15.320 回答