You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 13升级后ngx-contextmenu失效及connectedTo报错求助

解决方案

1. 替换弃用的ClientRect为DOMRect

TypeScript 4.x 已废弃ClientRect,官方推荐用DOMRect替代,先修改类型定义:

const offset = this.getOffset(this.divElement.nativeElement);
const anchorElement: any = {};
anchorElement.getBoundingClientRect = (): DOMRect => ({
  bottom: offset.top + $event.clientY,
  height: 0,
  left: offset.left + $event.clientX,
  right: offset.left + $event.clientX,
  top: offset.top + $event.clientY,
  width: 0
});

2. 适配Angular CDK Overlay新API(解决connectedTo报错)

Angular 13升级后,配套的CDK版本更新了Overlay的位置配置逻辑,connectedTo API已被移除,改用flexibleConnectedTo,有两种处理方式:

选项A:升级ngx-contextmenu到兼容版本

直接把ngx-contextmenu升级到支持Angular 13的版本(比如^13.x.x),执行命令:

npm install ngx-contextmenu@^13.1.0 --save

升级后依赖本身会适配新API,无需手动修改代码。

选项B:手动修改位置配置代码

如果暂时不能升级依赖,需要调整上下文菜单的触发逻辑,把connectedTo替换为flexibleConnectedTo:

// 原配置示例
// this.overlay.position()
//   .connectedTo(anchorElement, { originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'top' });

// 修改后的配置
this.overlay.position()
  .flexibleConnectedTo(anchorElement)
  .withPositions([{
    originX: 'start',
    originY: 'top',
    overlayX: 'start',
    overlayY: 'top'
  }]);

3. 验证修复

重新编译项目,右键触发上下文菜单,检查控制台是否还有报错,确认菜单正常显示。

内容的提问来源于stack exchange,提问作者sai krushna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:50:27