Svelte 自带组件
svelte:self 组件本身
svelte 组件不能自己 import 自身,但是有时需要自己本身组件嵌套引用(例如:树组件)
<script>
export let items = [
{
title: '开发',
children: [
{
title: '前端',
children: [
{
title: 'Angular'
},
{
title: 'React'
},
{
title: 'Svelte'
}
]
},
{
title: '后端',
children: [
{
title: 'Java'
},
{
title: 'Python'
},
{
title: 'Nodejs'
}
]
}
]
}
];
</script>
<ul>
{#each items as item (item)}
<li>
<p on:click={() => item.show = !item.show}>{item.title}</p>
{#if item.children && item.show}
<div class="list">
<svelte:self items={item.children} />
</div>
{/if}
</li>
{/each}
</ul>
<style>
p {
cursor: pointer;
}
ul {
list-style: none;
}
.list {
padding-left: 10px;
}
</style>
svelte:component 动态组件
app.svelte
<script>
import Home from "./home.svelte";
import Blog from "./blog.svelte";
let options = [
{
key: "home",
component: Home,
},
{
key: "blog",
component: Blog,
},
];
let selected = options[0];
</script>
<select bind:value="{selected}">
{#each options as option}
<option value="{option}">{option.key}</option>
{/each}
</select>
<svelte:component this="{selected.component}" />
home.svelte
<div>I am Home</div>
blog.svelte
<div>I am Blog</div>
svelte:fragment
类似 Angular 的 ng-container,本身不会进行渲染,只会渲染他的子组件
svelte:window svelte:body
可以绑定一些 window 和 body 的事件进行监听
svelte:head
可以在组件中动态的给 html 的<head>中添加内容