我见过人们在“ready”函数上添加事件监听器,在“connectedCallback”上添加其他人。我的问题是,每个地方的利弊是什么?在连接时,我们有责任将其删除;准备好了,它会留在那里,我不确定这是不是一个问题。
我应该这样做:
true
或者这个:
connectedCallback() {
super.connectedCallback();
this.addEventListener('click', this.myFunction.bind(this));
}
disconnectedCallback() {
super.disconnetedCallback();
this.removeEventListener('click', this.myFunction);
}
答案 0 :(得分:3)
直到Polymer 1.x.whatever
,一个元素生命周期中的ready
回调被调用,一次
<content>
个然后发布ready
,attached
被解雇
所以,在一切确实准备
之后,您可能已经使用ready
作为一次性回调
在Polymer 2.0开始之后,已经有合同更改了回调的触发方式,并且
ready
回调不再保证在新的<slots>
分发后执行,这意味着,不能确保ready本身将等待内容/轻量级DOM分发。
attached
现在是新的connectedCallback
,对于元素级DOM操作非常有用,例如设置属性,附加子等。这是在插槽节点之后发生的生命周期更改分布式,元素本身附加在DOM层次结构中,但在绘制后必须不。
因此,对于不依赖任何::slotted
内容的任何事件,请使用ready
回调
对于需要了解所有分布式内容以及shadow DOM的任何内容,请使用connectedCallback
但是,如果可能,请在元素的回调中使用超类afterNextRender
的{{1}}方法添加事件侦听器
这些是我可能想到的。
所有这些以及更多,如果有帮助,here
我还没有读过关于我们必须从生命周期回调中删除事件监听器的事情,或其他任何事情。
如果您指的是元素本身可以动态连接和断开连接的情况,
并且,考虑到这一点,您在元素的生命周期回调中的全局/本机元素上添加了一个事件监听器,
喜欢在Polymer
window
或custom-element
内的ready
附加事件监听器,
只有在这种情况下,聚合物才会建议您删除 connectedCallback
上的事件监听器