Angular应用就是模块化的,它的模块化系统NgModule相当于一个容器。NgModule通过它的元数据收集一些组件,指令,module、管道和一些其他的代码形成一个领域,并未这个领域提供一个编译上下文环境。
每个 Angular 应用都至少有一个 NgModule 类,也就是根模块,它习惯上命名为 AppModule,并位于一个名叫 app.module.ts 的文件中。引导这个根模块就可以启动你的应用。
大多数应用有很多特性模块,(即有多个NgModule),比如一些需求模块的组件会有自己的NgModule,也就是独立一个领域的编译上下文。
@NgModule的元数据:
import:当前模块导入的其他模块,import应该导入的是module,而不是compnents或者services
declarations:当前模块内包含的公共组件、指令信息、管道。declarations生命的是components,而不是module或者services
providers:当前模块可以使用的公共服务(可以为本模块内提供的服务,也可以是其他npm包中导入的服务)。provider提供的应该是services,而不是compnents或者modules。
exports:暴露出一些组件或者对象的子集供其他模块使用
entryComponents: 定义NgModule中要编译的组件集,这样他们才可以动态加载到视图中。
Bootstrap:应用的主视图,称为根组件。它是应用中所有其它视图的宿主。只有根模块才应该设置这个 bootstrap 属性。