6

在 中注册事件侦听器时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
});
4

1 回答 1

12

当它们附加到或之类的对象时,您应该Event Listeners在方法中删除,这将在您的自定义元素的生命周期后持续存在。detachedCallback()windowdocument

但是,如果Event Listener附加到自定义元素本身(或附加到其适当 DOM 中的任何元素),它将在其所有者元素被销毁时被删除。也就是说,在您上面的示例中,您不必调用removeEventListener()反对this.

于 2016-01-30T23:14:49.797 回答