2016-12-15 54 views
0

嗨在新的角2,我試圖把我在angular.io中學到的所有東西。 的問題是,我已經readed有關的核心模塊,服務,注射......和從app.component中的核心模塊消耗服務

如果我還可以說,核心模塊是這樣的:

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的構造器中它不起作用

​​

我缺少什麼?謝謝!

+0

角是採用分層注入,如果你需要在不同的模塊,使用該服務,你必須將其列爲供應商,因爲它是唯一在該模塊中的服務(和在它的內部)你已經把它列爲提供者。至少,這就是我從頭腦中記得的東西。 https://angular.io/docs/ts/latest/guide/hierarchical-dependency-injection.html – silentsod

+0

我會着眼於它。謝謝 – JesLopov

+0

嗯,我有一個運行中的笨蛋,看起來我錯了。我會在下面回答。 – silentsod

回答

0

ngModuledocumentation

提供商:提供程序[]定義的一組是 在此模塊的注射器可用注射對象。

換句話說,提供者將在模塊內部而不是外露。在文檔中進一步閱讀顯示只有指令/管道/(組件)適用於導出/聲明。

因此,要解決這個問題,則需要直接引用該服務在更高的層次模塊,注意,它會正確使用單實例化服務的核心模塊這是很酷,打破我的期望英寸

app.module.ts

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

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

如果你將有一大堆的共享服務比使用barrel,您一一列舉,並做了一次進口將是一個合理的做法。

這裏的運作demo

+0

我正在測試並發現,如果您**不要將LoggerService添加到提供程序中:[] **在app.module.ts中工作得很好。 :)。謝謝 – JesLopov

+0

這是不正確的。這將導致重複的服務實例。您可以將提供程序聲明保留在覈心模塊中。 –