【发布时间】:2019-11-22 05:14:19
【问题描述】:
我正在尝试使用 Injector 注入我的组件/服务,但其中之一需要 NgZone 作为其依赖项。来自https://angular.io/api/core/Injector
export MyComponent{
constructor() {
const injector = Injector.create({
providers: [
{ provide: NgZone, deps: [ ] },
{ provide: MyService, deps: [ NgZone ] }
]
});
this.myService = injector.get(MyService);
}
}
然后在子类中:
export MyOtherComponent extends MyComponent {
constructor() {
super();
}
public helloWorld() {
this.myService.stuff();
}
}
但我收到以下错误:
错误错误:StaticInjectorError[MyService -> NgZone]:
NullInjectorError:没有 NgZone 的提供者! 在 NullInjector.get (core.js:8896)
我尝试了一个在构造函数中没有任何内容的虚拟服务,并且它有效。
- 有没有办法像这样通过
deps手动提供NgZone? - 还有其他方法可以获取“全局”NgZone 对象(应该只有 1 个 NgZone 实例在运行吗?)
MyService 也是降级服务,在 AngularJS 和 Angular7 中都使用,不确定是否会改变。
编辑:我尝试这样做的原因是因为MyComponent 是一个组件基类,它将获得extends 并且有许多子类在其上扩展。如果我可以通过在内部手动注入来做到这一点,那么我不需要从孩子那里传递所有这些依赖项。想象一下,我有 6-7 个依赖项和 30 多个子项,假设我需要一些新的依赖项,我必须更新它们中的每一个...
【问题讨论】:
-
请展示更多关于这个东西的代码。您正在创建一个没有父级的 Injector,因此它只有您给它的东西。另外,您为什么要这样做,为什么不在构造函数中注入您的服务?手动创建注入器的目的是什么?
-
我在编辑中添加了我的理由。代码真的是你在那里看到的,我只是想知道如何手动注入任何需要那些与角度相关的类的东西,比如
NgZone。
标签: angular7