在AngularJS中使用GoJS禁用DragSelectingTool的方法
解决GoJS树形结构无法禁用DragSelectingTool及固定树形框的问题
嘿,我之前折腾GoJS的时候也碰到过类似的框选关不掉的情况,给你几个靠谱的解决办法:
首先,针对禁用DragSelectingTool,最直接的两种实现方式:
- 初始化Diagram时直接禁用该工具
在创建Diagram实例的时候,把dragSelectingTool.enabled设为false就行,还可以顺便把选择功能也关了(如果不需要选中节点的话):
const myDiagram = go.Diagram.fromDiv("myDiagramDiv", { // 你的其他树形图配置,比如TreeLayout之类的 dragSelectingTool: { enabled: false }, // 可选:完全禁止任何节点/链接的选中 allowSelect: false, });
- 从ToolManager里彻底移除这个工具
如果第一种方式没生效(比如某些复杂场景下工具被重新启用了),直接把DragSelectingTool从工具列表里删掉:
myDiagram.toolManager.removeTool(myDiagram.toolManager.dragSelectingTool);
另外,要完全固定住整个树形框,光禁用框选还不够,通常还得禁止节点拖动、画布平移和缩放,不然用户还是能挪节点或者拖画布,补充这些配置就稳了:
const myDiagram = go.Diagram.fromDiv("myDiagramDiv", { // 禁止节点被拖动 allowMove: false, // 禁止画布拖拽平移 allowPan: false, // 禁止滚轮或手势缩放画布 allowZoom: false, // 禁用框选工具 dragSelectingTool: { enabled: false }, // 可选:禁止选中任何元素 allowSelect: false, });
如果还是不行,你得检查下自己的代码,是不是在某个地方(比如节点模板、事件监听里)又把dragSelectingTool.enabled设回true了?或者节点模板里有没有设置movable: true之类的属性,覆盖了全局配置?
给你贴个完整的固定树形图示例代码,你可以对照着改:
function initTree() { const $ = go.GraphObject.make; const myDiagram = $(go.Diagram, "treeContainer", { // 树形布局,这里用垂直向下的布局 layout: $(go.TreeLayout, { angle: 90, layerSpacing: 40 }), // 核心固定配置 allowMove: false, allowPan: false, allowZoom: false, dragSelectingTool: { enabled: false }, allowSelect: false, // 可选:设置画布不可编辑 isReadOnly: true, }); // 节点模板,简单的圆角矩形+文字 myDiagram.nodeTemplate = $(go.Node, "Auto", $(go.Shape, "RoundedRectangle", { fill: "#4CAF50", strokeWidth: 0 }), $(go.TextBlock, { margin: 10, font: "14px sans-serif", stroke: "white" }, new go.Binding("text", "name")) ); // 链接模板 myDiagram.linkTemplate = $(go.Link, $(go.Shape, { stroke: "#ccc", strokeWidth: 2 }), $(go.Shape, { toArrow: "Triangle", fill: "#ccc", stroke: "#ccc" }) ); // 加载树形数据 const treeData = [ { key: "1", name: "Root Node" }, { key: "2", name: "Child Node 1", parent: "1" }, { key: "3", name: "Child Node 2", parent: "1" }, { key: "4", name: "Grandchild Node", parent: "2" }, ]; myDiagram.model = new go.TreeModel(treeData); } // 页面加载完成后初始化 window.addEventListener('DOMContentLoaded', initTree);
要是还有问题,把你的代码片段或者截图里的关键部分贴出来,我再帮你排查~
内容的提问来源于stack exchange,提问作者 title: ""Secretary-General of the United Nations""
相关产品推荐
相关产品推荐

