svelte - 如何在 Svelte 中直接挂载 HTMLElement?

标签 svelte svelte-3

我正在使用一些返回 HTML 元素的外部代码,最好嵌入它而无需通过 JavaScript 管理加载和所有内容(即 appendChild/removeChild )。现在我正在使用 {@html element.outerHTML},但这似乎不适合 HTML 字符串的往返:

<script>
  function sleep(ms) {
    return new Promise((resolve) => setTimeout(resolve, ms));
  }

  async function someCall() {
    await sleep(1000);
    const p = document.createElement("p");
    p.innerText = "hello!";
    console.log(p);
    return p;
  }

  let data = someCall();
</script>

<div>
  {#await data}
    <p>Loading data...</p>
  {:then result}
    {@html result.outerHTML}
  {/await}
</div>

我要找的可能是这样的

<div>
  {#await data}
    <p>Loading data...</p>
  {:then result}
    {result}
  {/await}
</div>

但这不起作用(因为它字符串化了元素)。

最佳答案

您可以使用 bind:this 附加 HTML

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

    function sleep(ms) {
      return new Promise((resolve) => setTimeout(resolve, ms));
    }

    let elem;
    
    onMount(async () => {
      await sleep(1000);
      const p = document.createElement("p");
      p.innerText = "hello!";
      elem.appendChild(p) 
    });
</script>

<div bind:this={elem}> 
</div>

关于svelte - 如何在 Svelte 中直接挂载 HTMLElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66917187/

相关文章:

svelte - 如何替换 Svelte 中目标的内容而不是附加到子项?

javascript - 使用商店在 Svelte 中使类实例具有反应性

javascript - 如何反转 svelte {#each ...} block 中的顺序

javascript - JS工兵: posting data to server (the right way ?)

Sveltekit 加载函数不会在查询更改中重新运行

scope - 带有 onMount 变量的 Svelte 响应式(Reactive)语句

svelte - 如何在 Svelte 组件中每次 prop 更改时发出获取请求?

server-side-rendering - svelte svelte-adapter-firebase 功能设置

svelte - 使用 Sveltekit 和 Tailwind CSS

sveltejs/kit 不接受 "npm run start"