0

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

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

有一个例外。现在,我希望就像' browser-module '(预取)或'forms-module'(手动添加)——在第2步(即装饰器数组)中应该有一个注入或名称添加' ng-模块'。为什么不存在?这是唯一的例外还是还有其他的?在装饰器中添加“ngModule”不应该是一种一致的方式吗?

在此处输入图像描述

注意:代码不是必需的,因为它可以正常工作。问题很简单,如果我们对所有组件、服务、模块、管道、模型和接口使用特定规则,为什么不使用“ngModule”?

4

3 回答 3

1

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

于 2018-09-27T06:17:31.010 回答
1

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

你可以看一下代码NgModule

这是一个接口

export interface NgModule { ...

然而,BrowserModule是一个装饰自己的模块@NgModule

检查代码

@NgModule({providers: BROWSER_MODULE_PROVIDERS, exports: [CommonModule, ApplicationModule]})
export class BrowserModule { ...
于 2018-09-27T06:21:09.767 回答
1

AOT 编译器包含 2 个阶段。

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

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

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

于 2018-09-27T07:11:31.823 回答