我正在尝试使用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()不是函数。 这是一个无法在处理程序中使用其他函数的大问题。 任何想法如何解决这个问题?
答案 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)
只是简单地将此方法绑定到调用它的当前范围。