2017-02-09 34 views
6

我一直在閱讀Angular教程,並且在通過HTTP部分https://angular.io/docs/ts/latest/tutorial/toh-pt6.html並且注意到在NgModule中聲明的導入順序會影響應用程序是否工作。我想知道這是爲什麼。爲什麼NgModule進口的順序很重要?

尤其是這個工程:

 

    @NgModule({ 
     imports: [ 
     BrowserModule, 
     FormsModule, 
     HttpModule, 
     InMemoryWebApiModule.forRoot(InMemoryDataService), 
     AppRoutingModule 
     ], 
    ... 
    }) 

但下面卻沒有。英雄列表不會被加載。需要注意的是,HTTP模塊聲明的InMemoryWebApiModule AFTER:

 

    @NgModule({ 
     imports: [ 
     BrowserModule, 
     FormsModule, 
     InMemoryWebApiModule.forRoot(InMemoryDataService), 
     HttpModule, 
     AppRoutingModule 
     ], 
    ... 
    }) 

本教程採用了棱角分明2.4.4。我已經注意到Firefox和IE中的問題。我沒有在我的谷歌搜索中發現任何可能表明問題根源的信息。

回答

3

提供者的順序很重要,對於導出的組件,指令或管道來說無關緊要,因爲衝突會導致錯誤。

InMemoryWebApiModule.forRoot(InMemoryDataService),重寫Http,如果HttpModule稍後提供,則此oVerriding將呈現爲void。 稍後添加的提供者會使用相同的密鑰覆蓋已註冊的提供者。

+2

感謝這有助於。我在InMemoryWebApi的自述文件中發現了這一點:「在HttpModule之後總是導入InMemoryWebApiModule,以確保InMemoryWebApiModule的XHRBackend提供程序取代所有其他內容。」這基本上就是你說的。 – hashpyrit

+1

導入順序也很重要,我注意到如果我將AppRoutingModule放在一個自定義模塊之後,它會將該自定義模塊作爲第一頁加載,而不是在AppRoutingModule中定義的那個 – albanx

相關問題