首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确地从窗口对象中删除事件侦听器?

如何正确地从窗口对象中删除事件侦听器?
EN

Stack Overflow用户
提问于 2022-07-28 14:08:06
回答 3查看 455关注 0票数 4

CustomElement.svelte

代码语言:javascript
运行
复制
<svelte:options tag="custom-element" />

<script>
  import { onMount, onDestroy } from "svelte";

  onMount(() => {
    window.addEventListener("scroll", funcRef);
  });

  onDestroy(() => {
    window.removeEventListener("scroll", funcRef);
  });

  const funcRef = (event) => {
    doWhatever();
  }
</script>

实际上,当自定义元素从文档中移除时,应该删除事件处理程序,但它不会。我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-07-28 15:32:02

从文档中删除并不等于被销毁。此组件应按预期工作的代码。

如果您使用客户端API或该组件位于Svelte逻辑之外(即没有被另一个Svelte组件添加/删除,例如通过{#if}),则必须确保实际调用$destroy

票数 1
EN

Stack Overflow用户

发布于 2022-07-28 15:42:19

您提供的代码将正常工作,当组件被销毁时,它将自动删除事件侦听器,但是这里有一个更好的版本。

代码语言:javascript
运行
复制
<svelte:options tag="custom-element" />

<script>
  import { onMount} from "svelte";

  onMount(() => {
    const funcRef = (event) => {
      doWhatever();
    }
    window.addEventListener("scroll", funcRef);

    return ()=>{
      // this function is called when the component is destroyed
      window.removeEventListener("scroll", funcRef);
    }
  });
</script>
票数 4
EN

Stack Overflow用户

发布于 2022-11-04 15:57:57

我想你可以用

代码语言:javascript
运行
复制
<svelte:window
  on:scroll={funcRef}
/>

如本例所示,https://svelte.dev/repl/30667c29ab92487597f7e845578f263a?version=3.52.0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73154257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档