【发布时间】:2017-02-16 02:19:44
【问题描述】:
我刚刚开始学习 Angular。我遇到了几个在空的class 上使用ngModule 装饰器的例子。
我想知道的是...在ngModule 装饰器下方直接声明的class 是仅用于初始化模块还是有其他用途?
【问题讨论】:
标签: angular typescript dependency-injection ng-modules
我刚刚开始学习 Angular。我遇到了几个在空的class 上使用ngModule 装饰器的例子。
我想知道的是...在ngModule 装饰器下方直接声明的class 是仅用于初始化模块还是有其他用途?
【问题讨论】:
标签: angular typescript dependency-injection ng-modules
该类仅用作您可以从 typescript 导入的参考。 装饰器不能在没有要装饰的类或成员的情况下放置。
编译后,它会保存你用来装饰那个类的注解。 Angular 将使用这些来配置注入器,尤其是当组件需要注入给定成员类型时,它需要创建哪个类。
现在,您可以在构造函数中添加一些内容,例如,如果您想在模块(和相关的组件/提供者)即将被注入时执行某些操作。这是我现在能想到的唯一用途。
[edit] 我只是在应用启动时使用它来注册语言环境。
export class AppModule {
constructor() {
registerLocaleData(localeDeCH);
}
}
这个想法来自here,他们没有指定在哪里打电话给registerLocaleData
【讨论】:
例如,您可以使用构造函数或实现ngDoBootstrap 在第一次加载延迟加载的模块(初始化)时执行代码
您还可以将服务注入构造函数,以便在初始化应用程序或延迟加载模块时由 DI 实例化它们。
我不记得看到过其他例子。
除此之外,它只带有@NgModule() 装饰器和那里提供的信息。
(构建应用时可能会生成一些额外的代码)
另请参阅https://angular.io/guide/entry-components 中的ngDoBootstrap 评论
【讨论】:
ngDoBootstrap 并添加您选择的要执行的代码。我看到了一些被问到的问题,但我自己不知道用例。
查看 angular NgModules 的官方文档。 https://angular.io/guide/ngmodules
以下内容来自于:
@NgModule 接受一个元数据对象,该对象描述如何编译组件的模板以及如何在运行时创建注入器
NgModule 元数据执行以下操作:
【讨论】:
您需要有效export 的类声明。
模块使用导入进行初始化,但您可以从类导出中访问功能(实际上,您在导入什么?)
希望这有帮助
编辑 --
“类的主体是空的。但是类上方的装饰器 (@NgModule) 为该类提供了功能。所以实际上,该类不是空的。它只是不需要任何额外的逻辑之后装饰器应用于它。bootstrapModule 将一个类作为输入,并假定该类用@NgModule 进行装饰,其配置方式类似于您所拥有的(声明、导入、提供程序等)。” 来自:Why Angular export empty class in app.modules.ts?
【讨论】: