事件处理函数不能使用其他(辅助)函数
Eventhandler-function can't use other (helper)functions
我正在尝试使用 Cytoscape.js 和 Angular2+ 构建应用程序。
核心部分发生在单个服务中 (cy.service)。
我将所有事件监听器添加到一个函数中,并在 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() 不是函数。
这是一个大问题,不能在处理程序中使用其他功能。
有什么想法可以解决这个问题吗?
那是因为像这样的绑定 cy.on('tap', this.handler);
你正在失去变量的范围。您应该以这种方式使用它 cy.on('tap', (event) => { this.handler(event) });
(如果它传递任何 event
对象)或 cy.on('tap', this.handler.bind(this));
.
() => { }
的第一种方法称为 arrow function
,它保留变量的当前范围。这是 ES6
规范的新特性。但是您不必担心,angular 编译器会将其转换为向后兼容 ES5
。
第二种方法 .bind(this)
只是简单地将此方法绑定到调用它的当前范围。
我正在尝试使用 Cytoscape.js 和 Angular2+ 构建应用程序。 核心部分发生在单个服务中 (cy.service)。 我将所有事件监听器添加到一个函数中,并在 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() 不是函数。 这是一个大问题,不能在处理程序中使用其他功能。 有什么想法可以解决这个问题吗?
那是因为像这样的绑定 cy.on('tap', this.handler);
你正在失去变量的范围。您应该以这种方式使用它 cy.on('tap', (event) => { this.handler(event) });
(如果它传递任何 event
对象)或 cy.on('tap', this.handler.bind(this));
.
() => { }
的第一种方法称为 arrow function
,它保留变量的当前范围。这是 ES6
规范的新特性。但是您不必担心,angular 编译器会将其转换为向后兼容 ES5
。
第二种方法 .bind(this)
只是简单地将此方法绑定到调用它的当前范围。