Eventhandler-function不能使用其他(辅助)函数

时间:2017-12-08 16:55:18

标签: javascript angular typescript cytoscape.js

我正在尝试使用Cytoscape.js和Angular2 +构建应用程序。 核心部分在单个服务(cy.service)中进行。 我在一个函数中添加所有Eventlistener,并在cy init之后调用它。

例如:

initEventlisteners(){
  cy.on('tap', this.handler);
  cy.on(...);
  ...
}

handler(event: any){
 console.log('something');
}

如果我将console.log包装在这样的辅助函数中:

helper(){
 console.log('something');
)

并在处理程序函数

中使用它
handler(event:any){
 this.helper();
}

它调用:helper()不是函数。 这是一个无法在处理程序中使用其他函数的大问题。 任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

那是因为像cy.on('tap', this.handler);这样的绑定你正在失去变量的范围。您应该以这种方式cy.on('tap', (event) => { this.handler(event) });(如果它通过任何event对象)或cy.on('tap', this.handler.bind(this));使用它。

使用() => { }的frist方法称为arrow function,它保留当前的变量范围。它是ES6规范的新功能。但是,您不必担心,角度编译器会将其转换为向后兼容ES5

第二种方法.bind(this)只是简单地将此方法绑定到调用它的当前范围。