Reputation: 133
Is there a way to import components in svelte dynamically using fetch or import? May be a svelte file or module file created from shareable component (still don't know how that works). very new with svelte and very excited.
I found some code in stackoverflow, which worked for v2. Here is the link
<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>
Upvotes: 10
Views: 8632
Reputation: 112807
The same functionality exists in Svelte 3, but you only need to assign the dynamically imported component to a regular variable that you use for the this
property on the svelte:component
.
Example (REPL)
<!-- App.svelte -->
<script>
let Chatbox;
function loadChatbox() {
import('./ChatBox.svelte').then(res => Chatbox = res.default)
}
</script>
<button on:click="{loadChatbox}">Load chatbox</button>
<svelte:component this="{Chatbox}" />
<!-- ChatBox.svelte -->
<h1>Dynamically loaded chatbox</h1>
<input />
Upvotes: 19