发表于: 2017-05-27 23:27:46
1 957
今天完成的事情:
特性模块
特性模块是带有@NgModule装饰器及其元数据的类,就像根模块一样。特性模块的元数据和根模块的元数据的属性是一样的。
根模块和特性模块还共享着相同的执行环境。它们共享着同一个依赖注入器,这意味着某个模块中定义的服务在所有模块中也都能用。
它们在技术上有两个显著的不同点:
1. 我们引导根模块来启动应用,但导入特性模块来扩展应用。
2. 特性模块可以对其它模块暴露或隐藏自己的实现。
特性模块用来提供了内聚的功能集合。聚焦于应用的某个业务邻域、用户工作流、某个基础设施(表单、HTTP、路由),或一组相关的工具集合。
虽然这些都能在根模块中做,但特性模块可以帮助我们把应用切分成具有特定关注点和目标的不同区域。
特性模块通过自己提供的服务和它决定对外共享的那些组件、指令、管道来与根模块等其它模块协同工作。
BrowserModule提供了启动和运行浏览器应用的那些基本的服务提供商。
BrowserModule还从@angular/common中重新导出了CommonModule,这意味着AppModule中的组件也同样可以访问那些每个应用都需要的Angular指令,如NgIf和NgFor。
注:在其它任何模块中都不要导入BrowserModule。特性模块和惰性加载模块应该改成导入CommonModule。它们不需要重新初始化全应用级的提供商。
如果你在惰性加载模块中导入BrowserModule,Angular就会抛出一个错误。
特性模块中导入CommonModule可以让它用在任何目标平台,不仅是浏览器。那些跨平台库的作者应该喜欢这种方式的。
通过路由器惰性加载模块
应用路Angular模块化
Angular模块把组件、指令和管道打包成内聚的功能块,每个模块聚焦于一个特性区域、业务领域、工作流或通用工具。
Angular模块是一个由@NgModule装饰器提供元数据的类,元数据包括:
- 声明哪些组件、指令、管道属于该模块;
- 公开某些类,以便其它的组件模板可以使用它们;
- 导入其它模块,从其它模块中获得本模块所需的组件、指令和管道;
- 在应用程序级提供服务,以便应用中的任何组件都能使用它。
每个Angular应用至少有一个模块类——根模块,我们将通过引导根模块来启动应用。
对于组件很少的简单应用来说,只用一个根模块就足够了。随着应用规模的增长,我们逐步从根模块中重构出一些特性模块,来代表一组相关功能的集合。然后,我们在根模块中导入它们。
AppModule - 应用的根模块
每个Angular应用都有一个根模块类。
@NgModule装饰器用来为模块定义元数据。
在main.ts中引导
在main.ts文件中,我们通过引导AppModule来启动应用。
针对不同的平台,Angular提供了很多引导选项。
- 通过即时(JiT)编译器动态引导
- 使用预编译器(AoT - Ahead-Of-Time)进行静态引导
声明指令和组件
服务提供商
模块可以往应用的“根依赖入器”中添加提供商,让那些服务在应用中到处可用。
导入支持性模块
Angular能识别NgIf、NgFor等指令的原因,是因为在AppModule中我们导入了BrowserModule模块。
导入BrowserModule会让该模块公开的所有组件、指令和管道在AppModule下的任何组件模板中直接可用,而不需要额外的繁琐步骤。
更准确地说,NgIf是来自@angular/common的CommonModule中声明的。
CommonModule提供了很多应用程序中常用的指令,包括NgIf和NgFor等。
BrowserModule导入了CommonModule并且重新导出了它。最终的效果是:只要导入BrowserModule就自动获得了CommonModule中的指令。
有些熟悉的Angular指令并不属于CommonModule。例如,NgModel和RouterLink分别属于Angular的FormsModule模块和RouterModule模块。在使用那些指令之前,我们也必须导入那些模块。
解决指令冲突
指令冲突表现在指令同名但功能不同时导入根模块时的情况。即这些指令是不同的,只是恰好指令名称相同而已。
我们可以通过创建特性模块来消除组件与指令的冲突。特性模块可以把来自一个模块中的声明和来自另一个的区隔开。
特性模块
特性模块是带有@NgModule装饰器及其元数据的类,就像根模块一样。特性模块的元数据和根模块的元数据的属性是一样的。
根模块和特性模块还共享着相同的执行环境。它们共享着同一个依赖注入器,这意味着某个模块中定义的服务在所有模块中也都能用。
它们在技术上有两个显著的不同点:
1. 我们引导根模块来启动应用,但导入特性模块来扩展应用。
2. 特性模块可以对其它模块暴露或隐藏自己的实现。
特性模块用来提供了内聚的功能集合。聚焦于应用的某个业务邻域、用户工作流、某个基础设施(表单、HTTP、路由),或一组相关的工具集合。
虽然这些都能在根模块中做,但特性模块可以帮助我们把应用切分成具有特定关注点和目标的不同区域。
特性模块通过自己提供的服务和它决定对外共享的那些组件、指令、管道来与根模块等其它模块协同工作。
明天计划的事情:
继续学习angular
问题:
rxjs
收获:
如上
评论