2017-02-09 65 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

相关问题