2017-02-09 5 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 
     ], 
    ... 
    }) 

が、以下にはありません。ヒーローのリストはロードされません。 HttpModuleをがInMemoryWebApiModule後に宣言されていることに注意してください:

 

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

チュートリアルでは、角度2.4.4を使用しています。私はFirefoxとIEの両方でこの問題に気付きました。 Googleの検索で問題の原因を示すものは見つかりませんでした。

答えて

3

競合によってエラーが発生するため、プロバイダの順序は、エクスポートされたコンポーネント、ディレクティブ、パイプに対しては問題ありません。

InMemoryWebApiModule.forRoot(InMemoryDataService),オーバーライドHttpであり、後でHttpModuleを指定した場合、このオーバーライドは無効になります。 後で追加されるプロバイダーは、登録済みのプロバイダーを同じキーで上書きします。

+2

ありがとうございました。私はInMemoryWebApiのreadmeでこれを見つけました: "InMemoryWebApiModuleのXHRBackendプロバイダーが他のすべてのものに取って代わることを確実にするために、常にHttpModuleの後にInMemoryWebApiModuleをインポートしてください。これは基本的にあなたが言ったことです。 – hashpyrit

+1

インポートの順序も重要ですが、AppRoutingModuleをカスタムモジュールの後に配置すると、AppRoutingModuleで定義されている代わりにそのカスタムモジュールを最初のページとしてロードすることに気付きました – albanx

関連する問題