如何删除 Aurelia 中的事件侦听器?

cho*_*ovy 4 aurelia

如何删除 Aurelia 中的事件侦听器?

这似乎没有做任何事情:

detached(){
  window.removeEventListener('scroll', this.windowScroll);
}
Run Code Online (Sandbox Code Playgroud)

当我更改路线时,该事件仍在触发。

我将它附加constructor()在我的视图模型文件中:

window.addEventListener('scroll', this.windowScroll.bind(this));
Run Code Online (Sandbox Code Playgroud)

我也尝试过deactivate(),当我改变路线时,两者都没有触发。

Mat*_*vis 5

这里至少有一个,但可能有两个问题。

设置事件监听器

如果您不能使用 Aurelia 绑定进行事件委托(滚动可能是也可能不是,我还没有尝试过),那么您应该使用附加的生命周期回调来设置您的事件处理程序,而不是构造函数. 原因是,除非您指定视图模型是瞬态的,否则构造函数将被调用一次。相反,您真的希望 Aurelia 在每次附加时都打开您的事件处理程序。

attached = () => {
    window.addEventListener('scroll', this.onScroll);
}
Run Code Online (Sandbox Code Playgroud)

如何编写生命周期回调

通常,您应该使用箭头符号编写生命周期回调。这是因为,IIRC,您this可能会在激活生命周期中被重新分配。TypeScript/ES6 中的箭头符号将保留您的this词法,即,它是您所期望的。

detached = () => { 
    window.removeEventListener('scroll', this.onScroll);
}
Run Code Online (Sandbox Code Playgroud)