I am trying to create a wrapper component just to create a card with gray background. Lets call it GrayCard
GrayCard.svelte
<script>
</script>
<div class="graycard-container">
<slot />
</div>
<style>
.graycard-container {
background-color: #f0f0f0;
padding: 16px;
}
</style>
But this a dynamic component, that I will get it from a different module. So I have to programmatically instantiate this component to use it.
So i create another wrapper just to make use of any such dynamic components.
DynamicComponent.svelte
<script>
import { onMount} from 'svelte';
export let props;
let remoteComponent;
let remoteComponentInstance;
onMount(async () => {
remoteComponent = (await import(`remoteComponent/GrayCard`));
remoteComponentInstance = new remoteComponent.default({
target: document.getElementById('dynamicComponent'),
props: {
...props
},
});
});
</script>
<div id="dynamicComponent"></div>
<slot />
<style>
</style>
Since I want to use it very generically, as a wrapper in my App.svelte, I want to use it as tag only, like
In App.svelte
<script>
import DynamicComponent from "./lib/components/DynamicComponent.svelte";
</script>
<DynamicComponent>
<p> Hey i am present inside a dynamic gray card</p>
</DynamicComponent>
<style>
</style>
I am able to successfully instantiate the gray card in my screen, but the contents (the children under DynamicComponent) are not coming within the graycard. I don't understand how to achieve this. Can anyone help me with this. Thank you.
PS: I am just thinking what is the right way to access the children of tag in the DynamicComponent.svelte programmatically, and place them all in the slot.
You should use
svelte:componentfor this insteadThe
#ifblock is because initiallyremoteComponentwill be empty.