通过键

时间:2017-11-09 09:41:15

标签: angular typescript gojs

在Angular中使用typescript,如何使用其键从图中选择一个节点?

当我创建一个新节点时,我必须用鼠标左键单击它以便选择它,我希望它立即被选中。

我必须在我的图表上调用哪个函数才能选择具有键" 1"的节点,这是我尝试过的,但似乎无法工作:

selectItem(item: any) {
    this.selectedItem = item;
    this.myDiagram.select(this.myDiagram.findNodeForKey(item.key));
    if (this.selectedItem['toPort']) {
      this.selectedItemtype = 'Link';
      this.myDiagram.select(this.myDiagram.findLinkForData(item));
    } else {
      this.selectedItemtype = 'Node';
      this.myDiagram.select(this.myDiagram.findNodeForKey(item.key));
    }
    // this.rerender();
}

我从一个树中删除一个项目并有两个窗口,图表窗口和一个属性窗口(我在其中编辑一个节点的属性),我需要能够直接编辑掉落项目的属性,但是似乎如果我编辑项目,而不是单击已删除的项目,它们将不再相同,并且先前编辑的项目将丢失。

1 个答案:

答案 0 :(得分:1)

这基本上是正确的,但不必要地复杂化。但要么你要做两次(如果它是一个节点),要么你可能找不到链接,如果它不是模型中的链接数据对象。

如果您通过设置 GraphLinksModel.linkKeyProperty GraphLinksModel 启用了链接键,则这应该足够了:

if (item.toPort !== undefined) {
  myDiagram.select(myDiagram.findPartForKey(item.key));
} else {
  myDiagram.select(myDiagram.findNodeForKey(item.key));
}

如果您尚未启用维护链接数据的唯一键,则需要执行您为链接所做的操作:

myDiagram.select(myDiagram.findLinkForData(item));

但这又取决于您的 GraphLinksModel.linkDataArray 中的对象引用相同。如果它不是同一个指针,您可能需要调用 Diagram.findLinksByExample 并选择一个。

关于属性编辑器,您使用的是DataInspector,https://gojs.net/latest/extensions/DataInspector.html吗?如果是这样,那应该是有效的。如果您已经实现了自己的HTML元素来编辑属性,那么您可能有错误的引用。您应该在 Diagram.selection 中显示/编辑第一个零件的属性。当用户从另一个图表(或相同的图表)拖动时删除节点的新副本时,新副本将位于 Diagram.selection 集合中。