繁体   English   中英

从sigma.js绑定事件中调用angular2组件函数

[英]calling angular2 component function from sigma.js bind events

我的angular2组件中有一个简单的函数,如下所示:

onSelectNode(label: String) {
console.log(label)
// do something based on label
  }

并在angular2中创建了一个基本的sigma.js图,如下所示:

var s = new sigma({
  graph: sigmaJson,
  container: 'network-graph',
  settings: {
    defaultNodeColor: '#ec5148'
  }
});

我的图形成功渲染。 现在,我想在单击节点之一时调用onSelectNode函数。 因此,我使用了如下bind功能:

s.bind('clickNode', nodeClick)

函数nodeClick的定义如下:

nodeClick(event) {
this.selectedLabel = event.data.node.label
console.log(this.selectedLabel)   // this prints correctly
this.onSelectNode(this.selectedLabel)  // getting error here

}

但是我无法从nodeClick函数中调用组件函数。 我在JavaScript控制台中收到以下错误:

ERROR TypeError: this.onSelectNode is not a function

有人可以指出我做错了吗?

找到了解决方案。 这个问题用错了this范围变量作为指向第一个在这里评论 最终在代码中进行了以下更改,并且成功了:

  1. 在回调函数之前,将当前的this上下文保存在单独的变量中。

    var self = this;

  2. 修改代码如下:

    s.bind('clickNode', function (e) { console.log(e.type, e.data.node.label, e.data.captor); self.selectedLabel = e.data.node.label; self.OnSelectNode(self.selectedLabel); });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM