Nao*_*aor 8 javascript svelte svelte-component
我知道我可以使用以下方法获取对 DOM 元素的引用bind:this:
<script>
import { onMount } from "svelte";
let root;
onMount(() => {
// root is div
});
</script>
<div bind:this="{root}">
content
</div>
Run Code Online (Sandbox Code Playgroud)
如何获取组件根元素的 DOM 节点的引用?
Wrapper.svelte:
<div class="root">
<slot />
</div>
App.svelte:
<script>
import { onMount } from "svelte";
let root;
onMount(() => {
// root is not div :(
});
</script>
<Wrapper bind:this="{root}">
content
</Wrapper>
Run Code Online (Sandbox Code Playgroud)
rix*_*ixo 10
Svelte 不强制使用根组件。
<p>I am valid component.</p>
<p>With multiple roots.<p>
Run Code Online (Sandbox Code Playgroud)
<script>
console.log('No root is valid too')
</script>
Run Code Online (Sandbox Code Playgroud)
因此,没有快捷语法来获取根元素,您需要手动“代理”要公开的元素:
Wrapper.svelte
<script>
export let root
</script>
<div bind:this={root}>...</div>
Run Code Online (Sandbox Code Playgroud)
App.svelte
<script>
import Wrapper from './Wrapper.svelte'
let el
</script>
<Wrapper bind:root={el} />
Run Code Online (Sandbox Code Playgroud)
使用一些奇特的 JS 语法,bind:this如果您愿意,您还可以复制该语法:
Wrapper.svelte
<script>
let root
export { root as this }
</script>
<div bind:this={root} />
Run Code Online (Sandbox Code Playgroud)
App.svelte
<script>
import Wrapper from './Wrapper.svelte'
let root
</script>
<Wrapper bind:this={root} />
Run Code Online (Sandbox Code Playgroud)