如何删除 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/

10-12 12:59
查看更多