如何删除 Aurelia 中的事件监听器?
这似乎没有做任何事情:
detached(){
window.removeEventListener('scroll', this.windowScroll);
}
当我更改路线时,该事件仍在触发。
我将它附加到我的 View 模型文件中的
constructor()
中:window.addEventListener('scroll', this.windowScroll.bind(this));
我也试过
deactivate()
并且在我改变路线时都没有触发。 最佳答案
这里至少有一个,但可能有两个问题。
设置事件监听器
如果您不能将 Aurelia 绑定(bind)用于事件委托(delegate)(对于滚动可能是也可能不是这种情况,我没有尝试过),那么您应该使用附加的生命周期回调来设置您的事件处理程序, 而不是 构造函数。原因是,除非你指定你的 View 模型是 transient 的,否则构造函数将被称为 一次 。相反,您真的希望 Aurelia 在每次附加时都打开您的事件处理程序。
attached = () => {
window.addEventListener('scroll', this.onScroll);
}
如何编写生命周期回调
通常,您应该使用箭头符号编写生命周期回调。这是因为,IIRC,您的
this
可能会在激活生命周期中重新分配。 TypeScript/ES6 中的箭头符号将在词法上保留您的 this
,即,它是您期望的样子。detached = () => {
window.removeEventListener('scroll', this.onScroll);
}
关于aurelia - 如何删除 Aurelia 中的事件监听器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30859181/