我们为什么不在app.module.ts的装饰器数组中添加“ ngModule”

时间:2018-09-27 06:15:00

标签: javascript angular dependency-injection decorator ng-modules

我正在做一个有角度的项目,并且已经制作了所需的组件和导入的模块。我在这里看到的主要问题...是我们执行2个步骤:

  1. 在顶部添加组件,服务,管道,模块,添加相应的文件或文件夹位置
  2. 将它们添加到装饰器中(组件,管道,模型进入声明),(导入模块)和(提供者服务)。

有一个例外。现在,我希望就像“ 浏览器模块”(预提取)或“表单模块”(手动添加)一样,在步骤2(即装饰器数组)中应该有“ ng-Module ”的注入或名称添加。为什么不在那里?这是唯一的例外,还是还有其他例外?难道不应该在装饰器中添加“ ngModule”吗?

enter image description here

  

注意:由于应用正常运行,因此不需要代码。问题很简单,如果我们对所有人使用特定规则-   组件,服务,模块,管道,模型和接口-为什么不   为“ ngModule”?

3 个答案:

答案 0 :(得分:1)

NgModule是由@NgModule装饰器标记的类。它不是在应用程序中配置的单独模块。

答案 1 :(得分:1)

这是必需的,因为在模块定义时使用了@NgModule装饰器。它只是一个装饰器,而不是一个模块。您需要导入其脚本,因为只需使用它即可。您可以将其视为@Input@Output装饰器。您将它们导入到组件中只是为了在组件中使用。

您可以查看code of NgModule

这是一个界面

export interface NgModule { ...

但是,BrowserModule是一个用@NgModule装饰自己的模块

检查code

@NgModule({providers: BROWSER_MODULE_PROVIDERS, exports: [CommonModule, ApplicationModule]})
export class BrowserModule { ...

答案 2 :(得分:1)

AOT编译器包含两个阶段。

  1. 代码分析阶段 2)代码生成阶段

在代码分析阶段,借助@ngModule类装饰器,AOT编译器将获取有关模块的元数据。使用这些详细信息,它将为编译创建metadata.json。

在代码生成阶段,它将创建模块工厂。