从删除节点 vis.js 处的操作调用自定义方法

Calling a custom method from the manipulation at delete node vis.js

我正在尝试将 vis.js (v4.21.0) 与 Angular (v4.2.4) 一起使用。

我想在删除节点之前调用一个自定义方法,所以我在操作中添加了一个删除节点的方法,但是我无法从中调用我的自定义方法。

My-component.ts

export class MyComponentComponent implements OnInit {

private graphData: any;
private options: any;

constructor() { }

ngOnInit() {
let nodeList = new Vis.DataSet([
  {id: 1, label: 'Node 1'},
  {id: 2, label: 'Node 2'},
  {id: 3, label: 'Node 3'},
  {id: 4, label: 'Node 4'},
  {id: 5, label: 'Node 5'}
]);

// create an array with edges
let edgeList = new Vis.DataSet([
  {from: 1, to: 3},
  {from: 1, to: 2},
  {from: 2, to: 4},
  {from: 2, to: 5}
]);
this.graphData = {nodes: nodeList, edges: edgeList};

this.options = {
manipulation: {
  enabled: true,
  initiallyActive: false,
  addNode: true,
  addEdge: true,
  editEdge: true,
  deleteNode: function(nodeData,callback) {
    this.deleteNodeFunction(nodeData); // defined below
     `here getting issue ''this'' is not defined.`
  },
  deleteEdge: true,
}
};

let network;

try {
 const container = document.getElementById('test');
  network = new Vis.Network(container, this.graphData, this.options);

}catch (e) {
  console.log(e.message)
}
}

deleteNodeFunction(nodeData){
// do something here 
// may be call some other method.
}

}

试试这个:

deleteNode: function(nodeData,callback) {
  this.deleteNodeFunction(nodeData); // defined below
}.bind(this),

发生的事情是,当 Vis.js 调用您的 deleteNode() 方法时,它使用自己的上下文调用它,因此 this 现在指的是网络而不是您的 MyComponentComponent实例。网络没有 deleteNodeFunction() 方法,所以没有任何反应。

调用 .bind(this) 应该可以避免这个问题。或者,您可以使用具有自动绑定功能的箭头函数:

deleteNode: (nodeData,callback) => {
  this.deleteNodeFunction(nodeData); // defined below
},