清理自定义元素中的事件侦听器

时间:2016-01-30 10:23:14

标签: javascript web-component custom-element

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
});

1 个答案:

答案 0 :(得分:9)

Event Listeners方法附加到detachedCallback()window等对象时,您应该删除document,这些对象会在您的自定义元素生命周期后保留。< / p>

但是如果Event Listener附加到自定义元素本身(或其正确DOM中的任何元素),它将在其所有者元素被销毁时被删除。 也就是说,在上面的示例中,您无需针对removeEventListener()致电this