自定义dewQtip指令手动触发ngbTooltip时出现NG0203错误
手动实例化NgbTooltip触发NG0203注入上下文错误
Bug描述
我在qtip.directive.ts中定义了dewQtip指令,功能和ngbTooltip指令基本一致,还包含组织生态内需要维护的自定义逻辑。指令里我通过this.ngbToolTip.open();手动触发tooltip打开,但实例化ngbToolTip时用了以下代码:
this.ngbToolTip = new NgbTooltip( this._elementRef, this._renderer, this.injector, this.viewContainerRef, this.ngbTooltipConfig, this.ngZone, document, this._cdRef, this._appRef );
错误就是这里导致的。
错误信息
Error: NG0203: inject()必须从注入上下文调用,例如构造函数、工厂函数、字段初始化器或使用
runInInjectionContext的函数。
调用栈
错误根源在positioning.ts的这段代码:
export function ngbPositioning() { const rtl = inject(NgbRTL);
调用链如下:
positioning.ts中的ngbPositioning()函数调用inject(NgbRTL)tooltip.ts中通过private _positioning = ngbPositioning();执行该函数qtip.directive.ts中this.ngbToolTip = new NgbTooltip(.....)实例化时触发上述调用
复现情况
已创建最小化复现示例。
版本信息
- Angular: 16.1.7
- ng-bootstrap: 15.1.2
- Bootstrap: 5.2.3
临时方案
目前仍在排查。尝试过降级ng-bootstrap版本(问题是从Angular11升级到16后出现的),但旧版本不支持Angular16,暂未找到可行方案。
内容的提问来源于stack exchange,提问作者Gods-Favorite-Idiot
相关产品推荐
相关产品推荐

