在 Svelte 中中断迭代(每个)?
Break iteration (each) in Svelte?
是否可以像 angular (ng-repeat="items in item | limitTo:4"
) 那样中断 Svelte 中的迭代或限制?
例如:
{#each items as item, i}
...
{#if i > 4}
{:break} <--- break here
{/if}
...
{/each}
没有 {:break}
块,但您可以 slice
在遍历数组之前取出数组中的前 4 个元素。
{#each items.slice(0, 4) as item, i} ... {/each}
Svelte 目前没有用于分隔符或范围的特殊语法。 (here's a pending proposal) 一个常见的习惯用法是使用 {length: N}
对象作为 #each
参数,这通常比每次渲染都创建新数组的效果更好。
{#each {length: 4} as _, i} {items[i]} {/each}
以下是一些其他有效的模式:
<script>
let items = ['a', 'b', 'c', 'd', 'e'];
$: filteredItems = items.slice(0, 4);
const filterItems = (i) => i.slice(0, 4);
</script>
<div>
{#each {length: 4} as _, i}
{items[i]}
{/each}
</div>
<div>
{#each items.slice(0, 4) as item}
{item}
{/each}
</div>
<div>
{#each filteredItems as item}
{item}
{/each}
</div>
<div>
{#each filterItems(items) as item}
{item}
{/each}
</div>
我只是使用 {#each myItems as item}{#if yourtruevalue} {item} {/if} {/each}
我不知道性能影响,但它非常简单。如果 yourtruevalue
为真 - 无论项目呈现的条件是什么 - 它都会呈现,如果不是则跳过该项目。
是否可以像 angular (ng-repeat="items in item | limitTo:4"
) 那样中断 Svelte 中的迭代或限制?
例如:
{#each items as item, i}
...
{#if i > 4}
{:break} <--- break here
{/if}
...
{/each}
没有 {:break}
块,但您可以 slice
在遍历数组之前取出数组中的前 4 个元素。
{#each items.slice(0, 4) as item, i} ... {/each}
Svelte 目前没有用于分隔符或范围的特殊语法。 (here's a pending proposal) 一个常见的习惯用法是使用 {length: N}
对象作为 #each
参数,这通常比每次渲染都创建新数组的效果更好。
{#each {length: 4} as _, i} {items[i]} {/each}
以下是一些其他有效的模式:
<script>
let items = ['a', 'b', 'c', 'd', 'e'];
$: filteredItems = items.slice(0, 4);
const filterItems = (i) => i.slice(0, 4);
</script>
<div>
{#each {length: 4} as _, i}
{items[i]}
{/each}
</div>
<div>
{#each items.slice(0, 4) as item}
{item}
{/each}
</div>
<div>
{#each filteredItems as item}
{item}
{/each}
</div>
<div>
{#each filterItems(items) as item}
{item}
{/each}
</div>
我只是使用 {#each myItems as item}{#if yourtruevalue} {item} {/if} {/each}
我不知道性能影响,但它非常简单。如果 yourtruevalue
为真 - 无论项目呈现的条件是什么 - 它都会呈现,如果不是则跳过该项目。