angular - @NgModule 的构造函数中是否应该有代码,如果有,有什么原因?
问题描述
可以这样做,并且在加载模块时运行代码:
import { NgModule } from '@angular /core';
@NgModule({...})
export class SomeNgModule {
constructor(providedService: ProvidedService) {
providerService.iCanDoThis('?');
}
}
但是如果我想初始化代码,我应该不使用APP_INITIALIZER
或其他一些钩子吗?
我找不到一个很好的理由来说明什么时候这是一个很好的用途以及它会有什么帮助。
可能另一个好问题是:这段代码何时会在 Angular 的应用程序生命周期中执行?
解决方案
我在这种情况下使用这种注入方式,我想在我的自定义类中使用 Angular 服务,但我不能直接在构造函数中注入它。因此我需要一个Injector
.
import {Injector, NgModule} from '@angular/core';
export let InjectorInstance: Injector;
@NgModule({
/* *** */
})
export class FeatureModule {
constructor(private injector: Injector) {
InjectorInstance = this.injector;
}
}
然后在我的自定义类中使用它来注入 Angular 服务,如下所示:
import {InjectorInstance} from 'pat-to-feature-module';
export class MyCustomClass{
getHttpService = () => {
return InjectorInstance.get<HttpClient>(HttpClient);
};
}
这样,我确保我使用(注入)由 Angular 创建的服务。也许还有其他方法可以使用此功能。
推荐阅读
- android - 如何在 Mac 上安装最新的 Android SDK 工具
- javascript - 检查输入时出错:预期 dense_Dense5_input 有 4 个维度。但得到了形状为 5,2,5 的数组
- progressive-web-apps - 带有弹簧的粘性页眉和页脚仅适用于 iOS PWA 的内容
- c++ - 为什么我的自定义信号处理程序会使子进程在比较 pid 时获得 SIGTTIN
- c - 编译 libPNG 示例时未定义的引用
- php - Laravel 测试用例检查 JSON 输出中的一个元素
- python - python numpy 动态地将元素添加到特定行的末尾
- mpi - 集群节点之间如何通信?
- java - 如何在单元测试中用模拟数据填充适配器?
- android - Flutter:图像溢出容器