【Angular4学习】模块化再理解-2

解决指令冲突

  指令冲突表现在指令同名但功能不同时导入根模块时的情况。即这些指令是不同的,只是恰好指令名称相同而已。
  我们可以通过创建特性模块来消除组件与指令的冲突。特性模块可以把来自一个模块中的声明和来自另一个的区隔开。

特性模块

  特性模块是带有@NgModule装饰器及其元数据的类,就像根模块一样。特性模块的元数据和根模块的元数据的属性是一样的。
  根模块和特性模块还共享着相同的执行环境。它们共享着同一个依赖注入器,这意味着某个模块中定义的服务在所有模块中也都能用。


它们在技术上有两个显著的不同点:

  1. 我们引导根模块来启动应用,但导入特性模块来扩展应用。
  2. 特性模块可以对其它模块暴露或隐藏自己的实现。
      特性模块用来提供了内聚的功能集合。聚焦于应用的某个业务邻域、用户工作流、某个基础设施(表单、HTTP、路由),或一组相关的工具集合。
      虽然这些都能在根模块中做,但特性模块可以帮助我们把应用切分成具有特定关注点和目标的不同区域。
      特性模块通过自己提供的服务和它决定对外共享的那些组件、指令、管道来与根模块等其它模块协同工作。

      BrowserModule提供了启动和运行浏览器应用的那些基本的服务提供商。
      BrowserModule还从@angular/common中重新导出了CommonModule,这意味着AppModule中的组件也同样可以访问那些每个应用都需要的Angular指令,如NgIf和NgFor。
      


注:在其它任何模块中都不要导入BrowserModule。特性模块和惰性加载模块应该改成导入CommonModule。它们不需要重新初始化全应用级的提供商。
  如果你在惰性加载模块中导入BrowserModule,Angular就会抛出一个错误。
  特性模块中导入CommonModule可以让它用在任何目标平台,不仅是浏览器。那些需要跨平台库的会更倾向于这种方式的。

猜你喜欢

转载自blog.csdn.net/YYZZHC999/article/details/80641916