我刚开始学习Angular。我在空ngModule
上使用class
装饰器遇到了几个例子。
我想知道的是......直接在class
装饰器下方声明的ngModule
是否仅用于初始化模块或是否用于任何其他目的?
答案 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元数据执行以下操作: