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

has*_*rit 16 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中的问题.我没有在谷歌搜索中发现任何可能表明问题根源的内容.

Gün*_*uer 13

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

InMemoryWebApiModule.forRoot(InMemoryDataService),覆盖Http,如果HttpModule在稍后提供,这是压倒一切作废.稍后添加的提供商使用相同的密钥覆盖已注册的提供商.

  • 谢谢这有帮助.我在InMemoryWebApi的自述文件中找到了这一点:"始终在HttpModule之后导入InMemoryWebApiModule,以确保InMemoryWebApiModule的XHRBackend提供程序取代所有其他提供程序." 这基本上就是你所说的. (2认同)
  • 导入顺序也很重要,我注意到如果我在自定义模块之后放置AppRoutingModule,那么它将把自定义模块加载为第一页而不是AppRoutingModule中定义的模块 (2认同)