【问题标题】:Why dont we add 'ngModule' in decorator array of app.module.ts为什么我们不在 app.module.ts 的装饰器数组中添加 'ngModule'
【发布时间】:2019-03-02 23:43:18
【问题描述】:

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

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

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

注意:代码不是必需的,因为应用程序运行良好。问题很简单,如果我们对所有人使用特定规则—— 组件、服务、模块、管道、模型和接口——为什么不 对于“ngModule”?

【问题讨论】:

  • 请添加代码而不是图片
  • 先生,这种情况不需要代码,这是一个简单的推理,即不向特定数组添加项目。

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


【解决方案1】:

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

【讨论】:

  • 意思... ngModule 与所有其他模块不同?
  • ngModule 带有 Angualr 核心。它是你用来声明你的模块的装饰器。
  • 但是,'browserModule'也是如此......不是......而且我们必须使用它来运行一个页面。那为什么要在'imports'数组中添加(步骤2底部声明的一部分)?
【解决方案2】:

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

你可以看看code of NgModule

这是一个接口

export interface NgModule { ...

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

查看code

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

【讨论】:

  • 那么,我们为什么要导入'browserModule',这也是@sajeetharan 所问的'angular/core' 的一部分。两者的规则必须相同。不是吗?
  • 是的,我的意思是后者。它不是一个模块,只是一个装饰器。 BrowserModule 是一个提供一堆东西的模块
【解决方案3】:

AOT 编译器包含 2 个阶段。

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

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

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

【讨论】:

    猜你喜欢
    • 2017-02-16
    • 2018-01-02
    • 2010-09-21
    • 2018-04-17
    • 2019-01-18
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    相关资源
    最近更新 更多