我们在ngModule装饰器下声明的类中编写了什么样的代码?

时间:2016-10-07 06:57:23

标签: angular typescript dependency-injection ng-modules

我刚开始学习Angular。我在空ngModule上使用class装饰器遇到了几个例子。

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

4 个答案:

答案 0 :(得分:3)

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

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

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

另请参阅https://angular.io/guide/entry-components

中的ngDoBootstrap评论

答案 1 :(得分:2)

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

希望这有帮助

编辑 -

"班级的主体是空的。但是类上面的装饰器(@NgModule)正在为该类提供其功能。所以真的,那堂课不是空的。在将装饰器应用于它之后,它不需要任何额外的逻辑。 bootstrapModule将一个类作为输入,并假设该类使用与您拥有的类似的方式配置的@NgModule(声明,导入,提供程序等)进行修饰。" 来自:Why Angular export empty class in app.modules.ts?

答案 2 :(得分:2)

该类仅用作可以从typescript导入的引用。 装饰者不能没有类或成员来装饰。

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

现在,您可以在构造函数中添加一些内容,例如,如果您想要在模块(及相关组件/提供程序)即将注入时执行某些操作。这是我现在能想到的唯一用途。

[edit]我刚用它来在应用程序启动时注册一个语言环境。

registerLocaleData

这个想法来自here,他们没有指定在哪里调用{{1}}

答案 3 :(得分:2)

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

以下内容来自:

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

NgModule元数据执行以下操作:

  1. 声明哪些组件,指令和管道属于该模块。
  2. 将其中一些组件,指令和管道公开,以便其他模块的组件模板可以使用它们。
  3. 使用当前模块中的组件所需的组件,指令和管道导入其他模块。 提供
  4. 其他应用程序组件的服务可以使用。