Oppgave 2 — Vise lister med {#each}
Bruk Svelte sin innebygde looping-syntaks til å vise mange elementer fra en liste uten å gjenta kode.
Bakgrunn
Istedenfor å skrive ut hvert element manuelt lar {#each} deg loope over en liste og rendre samme HTML for hvert element.
Grunnleggende syntaks
<script>
let frukter = ['Eple', 'Banan', 'Mango'];
</script>
{#each frukter as frukt}
<p>{frukt}</p>
{/each}Hent ut indeksen (posisjon i listen) med et komma:
{#each frukter as frukt, i}
<p>{i + 1}. {frukt}</p>
{/each} Loop over objekter med flere felt ved å destructure direkte:
{#each filmer as { tittel, år }}
<p>{tittel} ({år})</p>
{/each}Komplett eksempel
Hele +page.svelte som rendrer kortene under:
<script>
let filmer = [
{ tittel: 'Interstellar', år: 2014 },
{ tittel: 'The Dark Knight', år: 2008 },
{ tittel: 'Inception', år: 2010 },
{ tittel: 'Oppenheimer', år: 2023 },
{ tittel: 'Parasite', år: 2019 },
];
</script>
<div class="film-list">
{#each filmer as { tittel, år }, i}
<div class="film-card">
<span class="film-nr">{i + 1}</span>
<div>
<p class="film-tittel">{tittel}</p>
<p class="film-år">{år}</p>
</div>
</div>
{/each}
</div>
<style>
.film-list { display: flex; flex-direction: column; gap: 0.5rem; }
.film-card {
display: flex;
align-items: center;
gap: 1rem;
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 8px;
padding: 0.75rem 1rem;
}
.film-nr {
width: 1.75rem;
height: 1.75rem;
background: #f3f4f6;
color: #d97706;
font-weight: 700;
font-size: 0.8rem;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
.film-tittel { color: #111827; font-size: 0.95rem; font-weight: 500; margin: 0; }
.film-år { color: #6b7280; font-size: 0.8rem; margin: 0; }
</style> Resultatet:
1
Interstellar
2014
2
The Dark Knight
2008
3
Inception
2010
4
Oppenheimer
2023
5
Parasite
2019
Oppgaven
- Lag en liste med objekter i
<script>— valgfritt tema (byer, artister, matretter...). - Hvert objekt skal ha minst to felt, f.eks.
navnogland. - Vis alle elementene på siden med
{#each}og vis begge feltene. - Vis nummeret til hvert element ved bruk av indeksen.
- Bonus: Legg til et
{#if}inni loopen — f.eks. vis en stjerne ⭐ bak favorittene dine.
Tips
- Husk å lukke blokken med
{/each}. - Du kan ha hvilken som helst HTML inni en
{#each}-blokk, inkludert kort, tabeller, bilder. - For tomme lister: bruk
{:else}rett før{/each}— da vises en fallback-tekst.