2017-02-09 14 views
6

Przechodzę przez samouczek Angular i przechodząc przez sekcję HTTP https://angular.io/docs/ts/latest/tutorial/toh-pt6.html i zauważyłem, że kolejność, w której importowane są deklarowane w NgModule, ma wpływ na to, czy aplikacja działa, czy też nie. Chciałbym wiedzieć, dlaczego tak jest.Dlaczego kolejność importu NgModule ma znaczenie?

W szczególności to działa:

 

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

ale dodaje się tego nie robi. Lista bohaterów nie zostaje załadowana. Zauważ, że HttpModule jest zadeklarowane po InMemoryWebApiModule:

 

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

Tutorial korzysta kątowa 2.4.4. Zauważyłem problem zarówno w Firefoksie, jak i IE. Nie znalazłem nic w moich wyszukiwaniach w Google, które wskazywałyby źródło problemu.

Odpowiedz

3

Kolejność dostawców jest ważna dla eksportowanych komponentów, dyrektyw i rur, ponieważ nie ma to znaczenia, ponieważ konflikty powodują błędy.

Nadpisuje InMemoryWebApiModule.forRoot(InMemoryDataService),Http, a jeśli HttpModule zostanie dostarczony później, to OVerriding zostanie unieważnione. Dostawcy dodali później zastąpić już zarejestrowanych dostawców tym samym kluczem.

+2

Dzięki temu pomaga. Znalazłem to w pliku Readme InMemoryWebApi: "Zawsze importuj InMemoryWebApiModule po module HttpModule, aby upewnić się, że dostawca XHRBackend modułu InMemoryWebApiModule zastępuje wszystkie inne." To jest zasadniczo to, co powiedziałeś. – hashpyrit

+1

Kolejność importu również ma znaczenie, zauważyłem, że jeśli wstawię AppRoutingModule po module niestandardowym, to załaduje on ten moduł niestandardowy jako pierwszą stronę zamiast tej zdefiniowanej w AppRoutingModule – albanx

Powiązane problemy