13

我刚刚开始学习 Angular。我遇到了几个ngModule在空的class.

我想知道的是......装饰器class正下方的声明是ngModule仅用于初始化模块还是用于任何其他目的?

4

4 回答 4

5

ngDoBootstrap例如,当第一次加载延迟加载的模块(初始化)时,您可以使用构造函数或实现来执行代码

您还可以将服务注入构造函数,以便在初始化应用程序或延迟加载模块时由 DI 实例化它们。

我不记得看到其他例子了。除此之外,它只带有@NgModule()装饰器和那里提供的信息。(构建应用程序时可能会生成一些额外的代码)

另请参阅https://angular.io/guide/entry-componentsngDoBootstrap中的评论

于 2018-01-19T14:12:58.153 回答
2

查看 angular NgModules 的官方文档。https://angular.io/guide/ngmodules

以下内容来自于此:

@NgModule接受一个元数据对象,该对象描述如何编译组件的模板以及如何在运行时创建注入器

NgModule 元数据执行以下操作:

  1. 声明哪些组件、指令和管道属于该模块。
  2. 公开其中一些组件、指令和管道,以便其他模块的组件模板可以使用它们。
  3. 使用当前模块中的组件需要的组件、指令和管道导入其他模块。提供
  4. 其他应用程序组件可以使用的服务。
于 2018-01-19T14:09:19.937 回答
2

该类仅用作您可以从打字稿导入的参考。装饰器不能在没有要装饰的类或成员的情况下放置。

编译后,它将保存您用于装饰该类的注释。Angular 将使用这些来配置注入器,尤其是当组件需要注入给定的成员类型时,它需要创建哪个类。

现在,您可以将一些东西放入构造函数中,例如,如果您想在模块(和相关组件/提供者)即将被注入时做一些事情。这是我现在能想到的唯一用途。

[编辑] 当应用程序启动时,我只是用它来注册一个语言环境。

export class AppModule {
    constructor() {
        registerLocaleData(localeDeCH);
    }
}

这个想法来自这里他们没有指定在哪里打电话registerLocaleData

于 2018-01-19T13:15:58.070 回答
2

您需要有效的类声明export。该模块使用导入进行初始化,但您可以从类导出中访问功能(实际上,您在导入什么?)

希望这有帮助

编辑 -

“类的主体是空的。但是类上方的装饰器 (@NgModule) 正在为该类提供功能。所以真的,该类不是空的。在应用装饰器后它不需要任何额外的逻辑bootstrapModule 将一个类作为输入,并假定该类用@NgModule 进行装饰,其配置方式类似于您所拥有的(声明、导入、提供程序等)。” 来自:为什么 Angular 在 app.modules.ts 中导出空类?

于 2018-01-15T09:13:15.217 回答