2017-02-09 1 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를 사용하고 있습니다. 나는 파이어 폭스와 IE에서이 문제를 발견했다. 내 Google 검색에서 문제의 원인을 나타내는 내용을 찾지 못했습니다.

답변

3

충돌로 인해 오류가 발생하므로 공급자의 순서는 내 보낸 구성 요소, 지시문 또는 파이프에 중요하지 않습니다.

InMemoryWebApiModule.forRoot(InMemoryDataService),Http을 오버라이드하고 나중에 HttpModule이 제공된 경우이 oVerriding은 무효화됩니다. 나중에 추가되는 공급자는 이미 등록 된 공급자를 동일한 키로 재정의합니다.

+2

감사합니다. 나는 InMemoryWebApi의 readme에서 이것을 발견했다. "InMemoryWebApiModule의 XHRBackend 공급자가 다른 모든 것을 대신 할 수 있도록 HttpModule 뒤에 항상 InMemoryWebApiModule을 가져 오십시오." 이것은 기본적으로 당신이 말한 것입니다. – hashpyrit

+1

가져 오기 순서도 중요합니다. AppRoutingModule을 사용자 정의 모듈 다음에 배치하면 AppRoutingModule에 정의 된 첫 페이지 대신 해당 사용자 정의 모듈을로드하는 것보다주의해야합니다. – albanx

관련 문제