CommonModule与BrowserModule的角度

Pri*_*hra 13 angular angular5

我对Angular的世界很新.CommonModulevs 之间有什么区别BrowserModule?为什么一个应该优先于另一个?

Saj*_*ran 19

来自文档

BrowserModule提供了启动和运行浏览器应用程序所必需的服务.

BrowserModule还从@ angular/common重新导出CommonModule,这意味着AppModule模块中的组件也可以访问每个应用程序需要的Angular指令,例如NgIf和NgFor.

CommonModule(角度模板的所有基础:绑定,*ngIf,*ngFor ...),第一个应用程序模块除外,因为它已经是BrowserModule的一部分

还读这个.

  • 这个答案主要是复制粘贴,不需要编辑的部分才有意义。楼主,请完善你的答案。读者们,这个问题的其他答案更值得您花时间。 (2认同)
  • @Patrick感谢您的反馈。我不确定会比docs提供更好的解释(其他答案也有相同的链接) (2认同)

ANe*_*own 18

您需要了解的是,使用Angular创建模块化应用程序,并且有两种类型的模块。一个是根模块,另一个是功能模块。

  • 根模块导入BrowserModule(如果要在浏览器中渲染)。它具有与CommonModule渲染相同的材质,但也具有用于渲染的材质。
  • 现在,如果您要创建功能模块,由于您已经在根模块中导入了BrowserModule,因此这没有任何意义,并且将浏览器模块导入功能模块中也将产生额外的开销。另外,导入CommonModule可以释放功能模块,以供在任何目标平台(例如,本机移动平台)上使用,而不仅仅是浏览器。这就是为什么要导入CommonModule功能模块和BrowserModule根模块的原因。

  • 很好的答案!非常感谢你! (4认同)

Nar*_*esh 6

根应用程序模块AppModule导入BrowserModule,以便它具有启动和运行浏览器应用程序必不可少的所有服务。

AppModule中的组件还需要访问Angular伪指令(Arrtibute伪指令,结构伪指令),例如* ngIf* ngFor* ngSwitch等。这些伪指令可在CommonModule中使用,并由BrowserModule自动导出。这就是为什么我们可以访问AppModule中定义的组件中的指令的原因

并且根据文档

只有根应用程序模块AppModule才应导入BrowserModule,所有其他功能模块均应导入CommonModule,因为我们仅需要功能模块中的Angular指令,而不需要启动应用程序所需的服务(RootModule中已提供了这些服务)。

根据

对于组件,管道和指令,每个功能模块都应导入其自己的依赖项,而不管是否在根模块或任何其他功能模块中导入了相同的依赖项。