首页 > 解决方案 > Angular 9 无法实例化循环依赖!应用程序参考

问题描述

从 8 更新到 Angular 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 库中的错误?

标签: angularng-bootstrapangular9

解决方案


我找到了这个解决方案:

不要直接在构造函数中注入 NgModal,通过 Injector:

private modalService: NgbModal
constructor(private injector: Injector) {}

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

推荐阅读