Angular 9无法实例化循环依赖项!ApplicationRef

5

从Angular 8升级到9导致循环依赖错误

我刚刚升级到Angular 9,并修复了所有编译错误。现在我遇到一个涉及循环依赖的错误,但无法跟踪。

Error: Cannot instantiate cyclic dependency! ApplicationRef
at throwCyclicDependencyError (core.js:8072)
at R3Injector.hydrate (core.js:17049)
at R3Injector.get (core.js:16803)
at injectInjectorOnly (core.js:940)
at ɵɵinject (core.js:950)
at Object.NgbModalStack_Factory [as factory] (ng-bootstrap.js:6262)
at R3Injector.hydrate (core.js:17053)
at R3Injector.get (core.js:16803)
at injectInjectorOnly (core.js:940)
at Module.ɵɵinject (core.js:950)

如果我查看ng-bootstrap.js:6262的代码块,它似乎是在引用NgbModal组件。
    NgbModalStack.ɵprov = ɵɵdefineInjectable({ factory: function NgbModalStack_Factory() { return new NgbModalStack(ɵɵinject(ApplicationRef), ɵɵinject(INJECTOR), ɵɵinject(DOCUMENT), ɵɵinject(ScrollBar), ɵɵinject(RendererFactory2), ɵɵinject(NgZone)); }, token: NgbModalStack, providedIn: "root" });
NgbModalStack = __decorate([ __param(2, Inject(DOCUMENT))
], NgbModalStack);

这可能与具体的错误无直接关联,但我没有看到任何可能引起此问题的东西。 有人能想出可能导致这种情况的原因吗?或者这可能是 Angular Bootstrap 库中的一个 bug 吗?


你尝试升级依赖项了吗? - Guruprasad J Rao
一定升级了依赖项... 包括ng-bootstrap。 - millerbill3
这可能会有所帮助 - Guruprasad J Rao
谢谢Guruprasad,我查看了那个bug报告,我不认为它适用于我的情况。我认为错误没有在任何应用初始化服务中生成,而且我正在运行Angular 9.1.3。 - millerbill3
2个回答

2
我发现这个解决方案:
不要直接在构造函数中注入NgModal,而是通过注入器进行注入:
private modalService: NgbModal
constructor(private injector: Injector) {}

showModal() {
   // Inject the dependency of NgbModal 
   this.modalService = this.injector.get(NgbModal);
   this.modalService.open();
}

1

移除任何注入了NgbModal服务的服务。在App-initializer期间执行此操作。

在我的情况下,我是在一个加载器服务中注入它的。

所以我从app-initilizer中移除了加载器服务,并将加载器服务注入到了app.component.ts中。

这样就可以了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接