Svelte Slot 屬性

2023-02-22 15:32 更新

在當前程序中,我們有一個名為 <Hoverable>的組件來跟蹤鼠標是否放在上面,它需要將數(shù)據(jù)傳回父組件,以便我們可以渲染插入的內(nèi)容。

為此,我們使用 插槽屬性(slot props)。將Hoverable.sveltehovering的值傳遞給它的slot:

<div on:mouseenter={enter} on:mouseleave={leave}>
	<slot hovering={hovering}></slot>
</div>

請記住,你可以使用?{hovering}? 這種速記寫法。

然后我們使用let來暴露<Hoverable> 組件內(nèi)的內(nèi)容:

<Hoverable let:hovering={hovering}>
	<div class:active={hovering}>
		{#if hovering}
			<p>I am being hovered upon.</p>
		{:else}
			<p>Hover over me!</p>
		{/if}
	</div>
</Hoverable>

如果你想在其父組件中調(diào)用active, 你也可以給該變量重命名,

<Hoverable let:hovering={active}>
	<div class:active>
		{#if active}
			<p>I am being hovered upon.</p>
		{:else}
			<p>Hover over me!</p>
		{/if}
	</div>
</Hoverable>

你可以根據(jù)需要擁有任意數(shù)量的組件,并在組件內(nèi)部聲明插槽屬性。

命名插槽也擁有有屬性,但是?let?指令需要寫在 ?slot="..."? 標簽上而不是組件上。

示例代碼

  • App.svelte

<script>
	import Hoverable from './Hoverable.svelte';
</script>

<style>
	div {
		padding: 1em;
		margin: 0 0 1em 0;
		background-color: #eee;
	}

	.active {
		background-color: #ff3e00;
		color: white;
	}
</style>

<Hoverable let:hovering={active}>
	<div class:active>
		{#if active}
			<p>I am being hovered upon.</p>
		{:else}
			<p>Hover over me!</p>
		{/if}
	</div>
</Hoverable>

<Hoverable let:hovering={active}>
	<div class:active>
		{#if active}
			<p>I am being hovered upon.</p>
		{:else}
			<p>Hover over me!</p>
		{/if}
	</div>
</Hoverable>

<Hoverable let:hovering={active}>
	<div class:active>
		{#if active}
			<p>I am being hovered upon.</p>
		{:else}
			<p>Hover over me!</p>
		{/if}
	</div>
</Hoverable>

  • Hoverable.svelte

<script>
	let hovering;

	function enter() {
		hovering = true;
	}

	function leave() {
		hovering = false;
	}
</script>

<div on:mouseenter={enter} on:mouseleave={leave}>
	<slot hovering={hovering}></slot>
</div>


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號