2017-04-13 87 views
2

我有ExchangeService角2 @Injectable類和我有一個應用程序主模塊:爲什麼我不能在@NgModule中導入Angular 2服務?

@NgModule({ 
    imports: [ 
     BrowserModule, 
     HttpModule, 
     FormsModule, 
     ReactiveFormsModule, 
     ExchangeService, 
     RouterModule.forRoot(routes) 
    ], 
    providers: [ 
    { provide: LocationStrategy, 
     useClass: HashLocationStrategy 
    }, 
    ExchangeService 
    ] 
...}) 

這就引起異常

(index):16 Error: (SystemJS) Unexpected value 'ExchangeService' imported by the module 'Application5' 
    Error: Unexpected value 'ExchangeService' imported by the module 'Application5' 
    Error: (SystemJS) Unexpected value imported by the module Error: Unexpected value imported by the module 
    Error: Unexpected value imported by the module at eval (http://127.0.0.1:8080/node_modules/@angular/compiler/bundles/compiler.umd.js:13982:37) at Array.forEach (native) at CompileMetadataResolver.getNgModuleMetadata 
    Error: Unexpected value imported by the module at eval at Array.forEach (native) at CompileMetadataResolver.getNgModuleMetadata 

當我從imports子句除去ExchangeService(我留在異常消失providers子句)。我沒有(目前)明確需要ExchnageServiceimports條款(我不知道它有什麼好處),我只想ExchangeService可用於全局組件中的其他服務的注入。

問題是 - 爲什麼我不允許在imports條款中寫ExchangeService條款?Imports子句也包含其他TypeScript類 - 如HttpModule等等以及爲什麼imports子句不允許包含ExchangeService

回答

4

你應該導入內部提供商

imports: [ 
     BrowserModule, 
     HttpModule, 
     FormsModule, 
     ReactiveFormsModule,  
     RouterModule.forRoot(routes) 
    ] 

進口刪除:用於導入支撐模塊喜歡FormsModule,RouterModule,CommonModule,或任何其他定製的功能模塊。

閱讀本what-is-difference-between-declarations-providers-and-import-in-ngmodule

+0

我想通了,但我的問題是 - 服務ExchangeService和模塊BrowserModule之間的區別是什麼 - 爲什麼我應該導入一個,而不是導入其他? – TomR

+2

服務和模塊是兩個不同的東西 – Sajeetharan

+0

@TomR刪除答案的任何理由? – Sajeetharan

3
  • 使用imports可以使其它(FormsModule,HTTP模塊和等),您的當前模塊中可用的模塊。
  • 使用providers可以通過注入組件,其它服務,管道所需的服務等
1

imports用於導入當前模塊中其它角模塊。

providers用於告訴角度哪些類型(實際上:實例)可用於依賴注入。

angular module是一個組件,指令,管道,服務等的彙編。它是一個抽象,有助於構建更大的項目,幷包含其他地方編寫的功能。

每個應用程序至少包含一個模塊(您的案例中的主要模塊)。當應用程序增長時,你會被誘惑分割成幾個模塊。

你的ExchangeService大概不是一個模塊,而只是一個服務(有一些方法的類)。應用程序的其他組件和服務可能取決於具體的ExchangeService實例,並且如果將ExchangeService添加到提供者數組中,Angular將創建它的一個實例並在創建時注入它作爲依賴項,例如,組件(假定您將ExchangedService聲明爲組件構造函數的參數)。我建議閱讀https://angular.io/docs/ts/latest/guide/architecture.html。根據我的2美分,對這些建築構件的理解是成功使用Angular的必要條件。