是否可以在运行时动态加载Svelte模板?

Jar*_*red 2 svelte

我已经看过[<svelte:component>]here)的文档,但是看起来import在编译时我将不得不使用所有可能的模板。

在Svelte中是否可以fetch()根据用户操作从诸如调用之类的内容中加载任意数量的任意模板?然后将数据注入其中吗?

<slot>如果我计划在初始加载后对其进行更新,将其用于这样的工作是否效率低下?

Ric*_*ris 7

从源文本创建组件在技术上是可能的- 例如,REPL会这样做 -因为编译器不在乎它是在Node还是在浏览器中运行。但这绝对不推荐!(由于编译器有些大,这将击败使用Svelte的目的。)

相反,如果您使用汇总(带有experimentalDynamicImportexperimentalCodeSplitting)或webpack ,则可以自己动态导入组件:

<button on:click="loadChatbox()">
  chat to a customer service representative
</button>

{#if ChatBox}
  <svelte:component this={ChatBox}/>
{/if}

<script>
  export default {
    methods: {
      async loadChatbox() {
        const { default: Chatbox } = await import('./Chatbox.html');
        this.set({ Chatbox });
      }
    }
  };
</script>
Run Code Online (Sandbox Code Playgroud)

  • 捆绑器在构建时需要“import('x')”中的“x”,以便它们可以创建必要的代码分割块。传统的解决方案是拥有一个加载器映射,例如 `{A: () =&gt; import('./A.svelte'), B: () =&gt; import('./B.svelte'), .. .}` (2认同)
  • @RichHarris我们有点需要这样的东西来反思组件为文档(而不是生产)公开的道具。有没有办法做到这一点?我理想的解决方案是一个组件包裹另一个组件,然后吐出从插槽中抓取的孩子的道具。这是一个东西,还是像巫术?;)(郑重声明:过去构建设计系统的一个巨大问题是必须手动编辑文档更新,因此我们试图避免这种情况,并从组件本身自动生成我们可以生成的所有内容)谢谢进步! (2认同)