前言
前文已经提到go.Node中是对节点内部分一个布局和显示内容进行了一个介绍。包括集中布局的属性,包括一些属性的动态配置,根据获取到的节点数据进行判断某些元素的显示隐藏。这次以节点为一个整体介绍一些节点的属性
go.Node的属性配置
{
isShadowed: true, // 设置是否显示节点阴影
shadowOffset: new go.Point(5, 5), //设置节点阴影的偏移
shadowColor: '#67B73C', //节点偏移的颜色
movable:false,//设置节点是否可以拖动
deletable:false,//设置节点是够可以通过键盘的Delete按键删除
selectable: false, //设置节点是否可以选择
selectionAdorned:false, //设置节点在选中的时候是否显示边框
copyable:false, //设置节点是够可以通过ctrl+c进行复制
location, //设置节点的坐标位置
minLocation: new go.Point(0, 0), //设置节点的最小坐标位置
maxLocation: new go.Point(100, 100), //设置节点的最大坐标位置
isSelected:true, //设置节点在加载成功之后是否能够被选中
reshapable:true, // 设置接地那内部的go.shape绘图模板是够可以拖动改变大小
resizable: true, // 设置节点是够可以拖动改变节点大小
resizeCellSize: new go.Size(10, 10), //设置拖动改变大小的拖动范围
rotatable:true, // 设置节点是够可以旋转
fromSpot: go.Spot.RightCenter, //设置起始点的节点连接位置
toSpot: go.Spot.LeftCenter, //设置结束点的节点连接位置
desiredSize: new go.Size(160, 40), //设置节点的尺寸大小
avoidable:true, // 设置连线和节点是否不重合,如果设置不重合,则需要和go.Link的Link.routing 为AvoidsNodes才会生效
avoidableMargin: new go.Margin(10,10,10,10) // 如果设置连线和节点不重合,则连线个节点错开的边距
},
从最开始选择gojs的时候就提到,选择gojs的很大原因是因为gojs的交互特别的好。在上面设置的属性中便有是够可以选择的selectable和是够可以拖动的movable。并且就是当选中节点的时候我们可以通过键盘中的ctrl+c对节点进行复制,然后ctrl+v进行粘贴。当然如果在对节点的添加错误的时候,我们也可以通过键盘的Delete对节点进行删除操作。
多个节点端口和手动添加节点端口之间连线
在实际的开发需求中,可能会遇到节点需要多个起始端口的情况,并且有些节点的之间的连线需要手动进行连接。
this.myDiagram.nodeTemplate = $$(
go.Node,
"Auto",
$$(go.Shape, "Rectangle", { fill: "#67B73c", stroke: "#FF9900" }),
$$(
go.Panel,
"Table",
{ width: 100, height: 100 },
$$(go.RowColumnDefinition, { column: 0, alignment: go.Spot.Left }),
$$(go.RowColumnDefinition, { column: 2, alignment: go.Spot.Right }),
$$(
go.TextBlock, // the node title
{
column: 0,
row: 0,
columnSpan: 3,
alignment: go.Spot.Center,
font: "bold 10pt sans-serif",
stroke: "#FF9900",
margin: new go.Margin(4, 2),
},
new go.Binding("text", "text")
),
$$(
go.Panel,
"Horizontal",
{ column: 0, row: 1 },
$$(go.Shape, "Circle", {
width: 10,
height: 10,
portId: "A",
fill: "#FF0000",
toSpot: go.Spot.Left,
toLinkable: true,
toMaxLinks: 1,
}),
$$(go.TextBlock, "A")
),
$$(
go.Panel,
"Horizontal",
{ column: 0, row: 2 },
$$(go.Shape, "Circle", {
width: 10,
height: 10,
portId: "B",
fill: "#FF0000",
toSpot: go.Spot.Left,
toLinkable: true,
toMaxLinks: 1,
}),
$$(go.TextBlock, "B")
),
$$(
go.Panel,
"Horizontal",
{ column: 2, row: 1 },
$$(go.TextBlock, "C"),
$$(go.Shape, "Circle", {
width: 10,
height: 10,
portId: "C",
fill: "#00FF00",
fromSpot: go.Spot.Right,
fromLinkable: true,
})
),
$$(
go.Panel,
"Horizontal",
{ column: 2, row: 2 },
$$(go.TextBlock, "D"),
$$(go.Shape, "Circle", {
width: 10,
height: 10,
portId: "D",
fill: "#00FF00",
fromSpot: go.Spot.Right,
fromLinkable: true,
})
)
)
);
因为设置了每个端点只能连接一次,所以在第二D出发口拖出连线的时候,只有B口提供连接选项,A口已经不提供连接选项了。
总结
在实际项目中,有很多时候需要用到更加复杂的节点操作,包括拖拽、复制、粘贴、多端口连接并且手动连线的操作。因此对节点操作技巧做了一个拓展。