javascript - Cytoscape 事件 cxtap 被多次调用

标签 javascript angularjs cytoscape.js cytoscape-web

我正在尝试使用 Cytoscape 和 AngularJS 1.6 创建网络工作流程 创建两个节点后,用户可以在它们之间创建边。为此,我使用 cy.on('cxttap') cytoscape 函数检测两个节点上的右键单击,然后插入新边。 这很好用。直到我添加了一个新 View ,用户可以在其中查看数据库中保存的工作流程。问题是,如果我打开“查看”选项卡,然后返回“创建”选项卡,cy.on('cxttap')函数被调用两次,并且在 cytoscape Canvas 上插入了两条边,但在我的范围变量中只创建了一个条目。我曾经对两个 View 使用相同的工厂,但现在我对每个 View 使用不同的 Angular 工厂。

如果我多次打开这些选项卡之间的切换,则打开查看选项卡的次数就是调用该函数的次数,因此行数会更多。

这里(https://jsfiddle.net/y47kwpg7/4/)是我的两个 View 及其 Controller 的代码片段。 “创建 View ”-->“MlalTextWorkflowGeneratorCtrl”和“查看 View ”-->“MlalTextWorkflowViewerCtrl”。

(请原谅我,我不知道如何让它在单个文件中工作)

我这里的工厂用于 cytoscape Canvas ,并且对于另一个 View 也有类似的工厂,但具有不同的 id 选择。

感谢您的帮助!

最佳答案

您要么需要

(1) 如果您重复使用实例,请删除旧监听器,或者

(2) 每次创建新 View 时都会创建一个新实例。

关于javascript - Cytoscape 事件 cxtap 被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44997403/

相关文章:

javascript - 如何在数组中使用reduce方法将具有公共(public)键的多个Json对象转换为单个Json对象?

angularjs - Visual Studio Code 中的 Angular 2/TypeScript 多行字符串

javascript - 当我使用 angularjs 配置时,页面重定向到 IE8 中的主页

Cytoscape.js 将多条边合并为一条(较厚)边

cytoscape.js - 包裹节点标签

javascript - 异步匿名函数: is then() necessary?

javascript - 工厂返回返回函数,而不是函数的产物

javascript - 在编辑时实现锁定和解锁文档

javascript - 在 ng-repeat 中将所有先前项目的数据添加到当前项目

javascript - 是否有反转贝塞尔曲线的选项? (cytoscape.js)