在attachedCallback
中注册事件监听器时,我是否有责任确保在detachedCallback
中再次删除这些监听器?
如下面的最小样本所示,模式是可预测的,所以我想知道浏览器是否已经解决了这个问题?
<my-element>0</my-element>
class MyElement extends HTMLElement {
createdCallback() {
this.update = this.update.bind(this);
}
attachedCallback() {
this.addEventListener("click", this.update);
}
detachedCallback() {
this.removeEventListener("click", this.update);
}
update() {
this.textContent = Math.random();
}
}
document.registerElement("my-element", {
prototype: MyElement.prototype
});
答案 0 :(得分:9)
当Event Listeners
方法附加到detachedCallback()
或window
等对象时,您应该删除document
,这些对象会在您的自定义元素生命周期后保留。< / p>
但是如果Event Listener
附加到自定义元素本身(或其正确DOM中的任何元素),它将在其所有者元素被销毁时被删除。
也就是说,在上面的示例中,您无需针对removeEventListener()
致电this
。