Angular 不同种类 Module 的介绍
官方链接
Domain NgModules
使用领域模块来提供专属于特定功能或应用领域的界面,比如编辑客户或下单。
领域模块用来组织与特定功能有关的代码,里面包含构成此功能的所有组件、路由和模板。领域模块中的顶级组件是该特性或领域的根,是你要导出的唯一
组件。各种私有的支撑子组件都是它的后代。
Domain Module 的一个例子:
Routed NgModules
所有惰性加载模块都要用带路由的模块。使用该模块的顶级组件作为路由器导航路由的目标。带路由的模块不会导出任何内容,因为它们的组件永远不会出现在外部组件的模板中。
不要把惰性加载的带路由的模块导入到另一个模块中,因为这会触发一个急性加载,从而破坏了惰性加载它的目的。
例如,如果在 app.module.ts 里导入期望 lazy load 的 module A, 则 A 的lazy loading 行为将失效。
带路由的模块很少有提供者,因为你只在需要的时候加载带路由的模块(例如通过路由导航过来时)。 provider 数组中列出的服务不可用,因为根注入器不可能预先知道惰性加载的模块。如果你包含了提供者,那么它们所提供的服务的生命周期应该和该模块的生命周期完全一样。不要在带路由的模块及其导入的相关模块中提供全应用范围内的单例服务。
路由定义模块
使用路由定义模块来为领域模块提供路由配置,从而将路由相关的关注点从其伴生领域模块中分离出来。例子之一是官网中提到的 ContactRoutingModule,它为其伴生领域模块 ContactModule 提供路由。
使用路由定义模块来完成如下任务:
- 定义路由。
- 把路由器配置文件添加到模块的导入表中。
- 往模块的提供者列表中添加路由守卫和解析器(resolver)提供者。
路由定义模块的名字应该和其伴生模块的名字平行,但使用 Routing 后缀。例如, contact.module.ts 中的 ContactModule 有一个位于 contact-routing.module.ts 中的名为 ContactRoutingModule 的路由定义模块。
路由定义模块只能被其伴生模块导入。如果伴生模块是根模块 AppModule ,那么 AppRoutingModule 就会通过其导入表中的 RouterModule.forRoot(routes) 来添加路由器配置。
下图是 SAP Spartacus 一个例子:
服务模块
使用服务模块来提供实用工具服务,比如数据访问或消息传递。理想的服务模块完全由提供者组成,没有可声明对象。
注意,属于该模块的一组组件、指令和管道统称可声明对象。
可声明对象必须属于也只能属于一个模块。 如果你尝试把同一个类声明在多个模块中,那么编译器就会报错。 要注意不能声明那些从其它模块中导入的类。
Angular 的 HttpClientModule 是服务模块的一个典范。
只能使用根模块 AppModule 来导入各种服务模块。
更多Jerry的原创文章,尽在:“汪子熙”:
Angular 不同种类 Module 的介绍相关推荐
- Angular8 - 稳定版修改概述(Angular 8的新特性介绍)
Angular 8的新特性介绍 在之前Angular团队发布了8.0.0稳定版.其实早在NgConf 2019大会上,演讲者就已经提及了从工具到差分加载的许多内容以及更多令人敬畏的功能.下面是我对8. ...
- K-近邻算法之案例:鸢尾花种类预测--数据集介绍
K-近邻算法之案例:鸢尾花种类预测--数据集介绍 本实验介绍了使用Python进行机器学习的一些基本概念. 在本案例中,将使用K-Nearest Neighbor(KNN)算法对鸢尾花的种类进行分类, ...
- RPA学习天地:艺赛旗RPA机器人的4种类型和区别介绍
RPA学习天地为大家整理了RPA培训视频,欢迎关注,同步获取最新完整资料请关注 目前艺赛旗的有人值守机器人(助手机器人)和无人值守机器人都是需要先在控制台进行创建和配置账号才能使用,用户必须登录机器人 ...
- Java中的模块(Module)入门介绍
Java中的模块(Module)入门介绍 在Java 9版本中Java 语言引入了一个非常重要的概念:模块(module).module引入了Java代码分组的另一个级别.每个module都包含许多子 ...
- Angular Router的组件路由介绍
这是SitePoint Angular 2+教程的第4部分,有关如何使用Angular CLI创建CRUD应用程序. 在本文中,我们将介绍Angular Router,并了解当浏览器URL更改时它如何 ...
- python模块编程教程_python进阶教程之模块(module)介绍
我们之前看到了函数和对象.从本质上来说,它们都是为了更好的组织已经有的程序,以方便重复利用. 模块(module)也是为了同样的目的.在Python中,一个.py文件就构成一个模块.通过模块,你可以调 ...
- Angular In-memory Web API使用介绍
借助In-Memory Web API,Angular应用的HttpClient发送请求之后,会自动被In-memory Web API拦截,在in-memory数据存储器中管理,并返回模拟的数据响应 ...
- 可信平台模块TPM(Trusted Platform Module)介绍及tpm-tools安装使用
可信平台模块TPM(Trusted Platform Module)是一种植于计算机内部为计算机提供可信根的芯片.该芯片的规格由可信计算组(Trusted Computing Group)来制定. 中 ...
- angular 系列八 ui-router详细介绍及ngRoute工具区别
我们了解 angular.js 是一种富客户端单页面应用,所以要在一个页面呈现不同的视图,路由起到了至关重要的作用. angular.js 为我们封装好了一个路由工具 ngRoute ,它是一种靠ur ...
最新文章
- sql2000 的bcp命令
- 蓝牙 GameKit
- 32位十六进制浮点数转换为十进制浮点数的方法
- zwpython_零起点Python大数据与量化交易
- 【工业控制】PolyWorks 2020基础教程
- 复制出来的文本都是大写_好用又冷门的Word快捷键,据说80%的人都不知道!
- SAP Cloud Platform Neo环境的权限管理
- iphone固件降级_我在iPhone上装了个安卓
- 前端学习(2186):知识回顾
- 【转载】徐小平techCrunch演讲:创业者要找到跟你同生共死的伙伴!
- 如何合理的配置线程数?
- 网络存储 linux 访问,Linux基础教程学习笔记28——使用Samba访问网络存储
- 小度智能音响拆解 芯片_不拆不快:小度音箱拆解测评
- SAP License:SAP凭证的类别和记账码
- 辞职专心造火箭,贝佐斯能追上马斯克吗?
- 【bzoj2959】长跑【LCT+并查集】
- 怎么样通过API函数获取tooltip的内容(请高手帮忙)
- 明源售楼系统技术解析(一)搭建MVC3框架
- 动态SQL之choose
- 基于bert的platos republic i ii情绪分析和可视化