如何删除 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(),当我改变路线时,两者都没有触发。
这里至少有一个,但可能有两个问题。
如果您不能使用 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)
| 归档时间: |
|
| 查看次数: |
1710 次 |
| 最近记录: |