声明,提供者和导入在NgModule之间有什么区别

我想了解angularjs-2,然后我碰到@Module

  1. import
  2. 声明
  3. 供应商

在Angularjs-2快速启动之后

angular度的概念

  • imports使当前模块中的其他模块的导出声明可用
  • declarations是使当前模块的指令(包括组件和pipe道)可用于当前模块中的其他指令。 指令,组件或pipe道的select符只有在声明或导入时才与HTML相匹配。
  • providers将为DI提供服务和价值。 它们被添加到根作用域中,并被注入到其他服务或指令中,这些服务或指令具有依赖性。

对于providers一个特殊情况是懒加载的模块,它们有自己的子注入器。 只有延迟加载模块的提供者才会默认提供给这个延迟加载的模块(而不是像其他模块一样)。

有关模块的更多细节,请参阅https://angular.io/docs/ts/latest/guide/ngmodule.html

  • exports使组件,指令和pipe道可用于将此模块添加到imports模块中。 exports也可用于重新导出CommonModule和FormsModule等模块,这些模块通常在共享模块中完成。

  • entryComponents注册用于离线编译的组件,以便它们可以与ViewContainerRef.createComponent()一起使用。 在路由器configuration中使用的组件是隐式添加的。

TypeScript导入

import ... from 'foo/bar' index.ts import ... from 'foo/bar' ( 可能会parsing为index.ts )用于TypeScript导入。 每当在另一个打字稿文件中声明的打字稿文件中使用标识符时,都需要这些标记。

Angular的@NgModule() imports和TypeScript import完全不同的概念

imports :用于导入支持模块,如FormsModule,RouterModule,CommonModule或任何其他定制function模块。

declarations :用于声明属于当前模块的组件,指令,pipe道。 声明内的所有内容都相互认识。 例如,如果我们有一个组件,说UsernameComponent,显示用户名的列表,我们也有一个pipe道,说toupperPipe,它将string转换为大写字母的string。 现在,如果我们想在UsernameComponent中以大写字母显示用户名,我们可以使用我们之前创build的toupperPipe,但是UsernameComponent如何知道toupperPipe存在,以及如何访问和使用它,这里是声明,我们可以声明UsernameComponent和toupperPipe。

Providers :用于在模块中注入组件,指令,pipe道所需的服务。

请在此处详细阅读: https : //angular.io/docs/ts/latest/guide/ngmodule.html