在#Each 块中仅显示 1 个元素的 Svelte 组件
Show Svelte Component for Only 1 Element In #Each Block
我有一个#each 块,显示图像和文本。如果用户单击一个按钮,我想在该特定图像上显示一个组件,而不是所有图像。现在,我有类似下面的东西,所以 #if loading,显示 LoadingSpinnger 组件。这显示在所有图像上,而不仅仅是单击的图像。有没有办法在 div 中添加一个组件,使其不适用于所有图像?
{#each things as thing}
<div class="image">
{#if loading}
<LoadingSpinner />
{/if}
<img
src={thing.p}
id ={thing.id} />
</div>
<div class="info">
Name: {thing.n} Species: {thing.s}
</div>
<div class="button">
<button on:click={addComponent()}>
Button Text
</button>
</div>
{/each}
这是因为 loading
变量未绑定到任何特定图像。
要跟踪每个 thing
的加载状态,请使用由 thing.id
键入的字典。
然后用thing.id
检查loading
字典:
{#each things as thing}
{#if loading[thing.id]}
<LoadingSpinner/>
{:else}
<img src={thing.src}/>
{/if}
{/each}
Joshnuss 的回答也有效,但我需要将加载变量保持为 true/false 值,因为它会切换其他变量。所以我刚刚添加了一个新变量,thingLoading
,并像这样使用它:
{#each things as thing}
<div class="image">
{#if loading && thingLoading === thing.id}
<LoadingSpinner />
{/if}
<img
src={thing.p}
id ={thing.id} />
</div>
<div class="info">
Name: {thing.n} Species: {thing.s}
</div>
<div class="button">
<button on:click={addComponent()}>
Button Text
</button>
</div>
{/each}
我有一个#each 块,显示图像和文本。如果用户单击一个按钮,我想在该特定图像上显示一个组件,而不是所有图像。现在,我有类似下面的东西,所以 #if loading,显示 LoadingSpinnger 组件。这显示在所有图像上,而不仅仅是单击的图像。有没有办法在 div 中添加一个组件,使其不适用于所有图像?
{#each things as thing}
<div class="image">
{#if loading}
<LoadingSpinner />
{/if}
<img
src={thing.p}
id ={thing.id} />
</div>
<div class="info">
Name: {thing.n} Species: {thing.s}
</div>
<div class="button">
<button on:click={addComponent()}>
Button Text
</button>
</div>
{/each}
这是因为 loading
变量未绑定到任何特定图像。
要跟踪每个 thing
的加载状态,请使用由 thing.id
键入的字典。
然后用thing.id
检查loading
字典:
{#each things as thing}
{#if loading[thing.id]}
<LoadingSpinner/>
{:else}
<img src={thing.src}/>
{/if}
{/each}
Joshnuss 的回答也有效,但我需要将加载变量保持为 true/false 值,因为它会切换其他变量。所以我刚刚添加了一个新变量,thingLoading
,并像这样使用它:
{#each things as thing}
<div class="image">
{#if loading && thingLoading === thing.id}
<LoadingSpinner />
{/if}
<img
src={thing.p}
id ={thing.id} />
</div>
<div class="info">
Name: {thing.n} Species: {thing.s}
</div>
<div class="button">
<button on:click={addComponent()}>
Button Text
</button>
</div>
{/each}