angular - 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 库中的错误?
解决方案
我找到了这个解决方案:
不要直接在构造函数中注入 NgModal,通过 Injector:
private modalService: NgbModal
constructor(private injector: Injector) {}
showModal() {
// Inject the dependency of NgbModal
this.modalService = this.injector.get(NgbModal);
this.modalService.open();
}
推荐阅读
- javascript - Cloud Firestore 中 get() 和 onSnapshot() 的区别
- nativescript - 如何在保留旧应用程序数据的同时将 Android 原生应用程序升级到基于 NativeScript 的新版本?
- typescript - Costum Pipe 使图像无限循环(闪烁)
- javascript - 在vuejs中使用`v-select`时如何获取`id`值作为选项值和`cname`作为选项标签?
- c# - Excel 互操作只读过滤行
- php - 我无法从控制器访问数据以查看(tpl = 模板)OpenCart
- java - 如何使用 JavaMail 将图像添加到 Freemarker 模板
- django - 姓名输入的最佳方法
- android - 在平板电脑等大型设备上始终显示侧面菜单(抽屉)[react-native-navigation]
- javascript - 如何在 JavaScript 中获取 span 标签父类名?