golden-layout 2.6.0中newDragSource()方法失效问题求助
Golden Layout 2.6.0下拉菜单拖拽源失效问题
我们正在将大型Angular 16生产应用从Golden Layout 1.5.9版本迁移至2.6.0版本,过程中遇到了下拉菜单拖拽功能失效的问题。
原有功能(1.5.9版本)
应用内存在一个下拉菜单,包含所有可添加到页面的widget名称。初始化阶段,我们通过GoldenLayout对象的newDragSource方法,将菜单中的所有HTML元素设置为拖拽源:
- 菜单项可拖拽到页面,作为Golden Layout组件添加,具备所有预期功能
- 点击菜单项也能正常将组件添加到页面
2.6.0版本的问题
拖拽功能完全失效:菜单项无法触发拖拽行为,但点击菜单项仍可正常添加组件,且组件自身功能正常。
拖拽源创建代码
public createNewWidgetDragSource(element: HTMLElement, widgetModel: Widget): void { const gl = this.getGoldenLayoutInstance(); const config = () => { const item: DragSource.ComponentItemConfig = { state: null, title: widgetModel.name, type: 'widget-golden-instance', }; return item; }; gl.newDragSource(element, config); }
相关说明
- 上述代码与golden-layout-ng-app参考应用中的代码几乎完全一致,该参考应用使用2.5.0版本时拖拽功能正常
- 组件类型
widget-golden-instance是一个通用Golden Layout容器组件,作为多个自定义widget的宿主
排查情况
- 检查gl对象,其内部的
_dragSources数组已正确填充菜单中的LI元素 - 编辑器及浏览器中无报错(仅存在DragSource命名空间下ComponentItemConfig的弃用警告,移除该类型后行为无变化)
- 补充测试:
- 若在页面中硬编码一个元素,用相同的
createNewWidgetDragSource函数设置为拖拽源,功能正常 - 尝试在菜单打开、列表项可见后再初始化拖拽源,问题依旧
- 确认调用
createNewWidgetDragSource时确实传入了菜单的列表项元素(不传会触发Golden Layout源码的错误提示) - 将参考应用升级至2.6.0版本后,拖拽功能仍正常
- 若在页面中硬编码一个元素,用相同的
所有配置、元素、时机看似都无问题,也无错误提示,但拖拽功能就是无法运行。我是否遗漏了什么?这是一个bug吗?
内容的提问来源于stack exchange,提问作者danwellman
相关产品推荐
相关产品推荐

