为什么NgModule进口的顺序很重要?

时间:2017-02-09 19:10:56

标签: angular

我一直在浏览Angular教程,并在浏览HTTP部分https://angular.io/docs/ts/latest/tutorial/toh-pt6.html时注意到在NgModule中声明导入的顺序会对应用程序是否有效产生影响。我想知道为什么会这样。

特别是这有效:


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

但以下情况并非如此。英雄列表没有加载。请注意,HttpModule是在InMemoryWebApiModule之后声明的:


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

本教程使用的是Angular 2.4.4。我注意到了Firefox和IE中的问题。我没有在谷歌搜索中发现任何可能表明问题根源的内容。

3 个答案:

答案 0 :(得分:8)

提供商的顺序很重要,对于导出的组件,指令或管道而言并不重要,因为冲突会导致错误。

InMemoryWebApiModule.forRoot(InMemoryDataService),覆盖Http,如果稍后提供HttpModule,则此oVerriding将变为无效。 稍后添加的提供商会使用相同的密钥覆盖已注册的提供商。

答案 1 :(得分:2)

是的,模块导入顺序就是问题

答案 2 :(得分:2)

是。如果一个模块依赖另一个模块,则顺序很重要。