javascript - 清理自定义元素中的事件监听器

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

最佳答案

你应该删除 Event ListenersdetachedCallback()当它们附加到像 window 这样的对象时的方法或 document ,这将在您的自定义元素生命周期结束后继续存在。

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

关于javascript - 清理自定义元素中的事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35100584/

相关文章:

javascript - JQuery 迭代当前 SELECT 值

javascript - 我可以将函数作为属性传递给 Web 组件吗?

javascript - Polymer:自定义元素在 Enter 上提交表单

html - Polymer (1.0) - 动态使用 xlink :href$ inside template not working properly

angular - 如何管理 Angular 2 自定义输入组件的焦点状态?

javascript - 自定义 HTML 元素属性未显示 - Web 组件

javascript - 使用 jQuery 将 'script' 放在 BODY 标记的末尾之前

javascript - 如何在 Laravel 5.2 中验证插入表的数据

javascript - fitBounds() 显示整个地球(如果 map 先隐藏然后显示)

javascript - Vuetify 构建为 Web 组件样式未显示