Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions src/content/docs/de/basics/astro-components.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ Du kannst das Komponentenskript verwenden, um jeden JavaScript-Code zu schreiben
- das Abrufen von Inhalten aus einer API oder Datenbank
- das Erstellen von Variablen, auf die du in deiner Vorlage verweisen wirst


```astro title="src/components/MeineKomponente.astro
---
import IrgendeineAstroKomponente from '../components/IrgendeineAstroKomponente.astro';
Expand All @@ -52,6 +51,7 @@ import irgendwelcheDaten from '../data/pokemon.json';

// Zugriff auf übergebene Props (Komponenteneigenschaften), wie z. B. `<X title="Hallo, Welt!" />`
const { title } = Astro.props;

// Abrufen externer Daten, auch aus einer privaten API oder Datenbank
const data = await fetch('EINE_GEHEIME_API_URL/users').then(r => r.json());
---
Expand All @@ -72,7 +72,7 @@ Unterhalb des Komponentenskripts befindet sich die Komponentenvorlage. Sie besti

Wenn du hier einfaches HTML schreibst, wird deine Komponente dieses HTML auf jeder Astro-Seite rendern, auf der sie importiert und verwendet wird.

Die [Syntax der Astro-Komponentenvorlage](/de/reference/astro-syntax/) unterstützt jedoch auch **JavaScript-Ausdrücke**, Astro-[`<style>`](/de/guides/styling/#styling-in-astro) und [`<script>`](/de/guides/client-side-scripts/#client-side-scripts)-Tags, **importierte Komponenten** und [**spezielle Astro-Direktiven**](/de/reference/directives-reference/). Daten und Werte, die im Komponentenskript definiert werden, können in der Komponentenvorlage verwendet werden, um dynamisch erstelltes HTML zu erzeugen.
Die [Syntax der Astro-Komponentenvorlage](/de/reference/astro-syntax/) unterstützt jedoch auch **JavaScript-Ausdrücke**, Astro-[`<style>`](/de/guides/styling/#styling-in-astro) und [`<script>`](/de/guides/client-side-scripts/)-Tags, **importierte Komponenten** und [**spezielle Astro-Direktiven**](/de/reference/directives-reference/). Daten und Werte, die im Komponentenskript definiert werden, können in der Komponentenvorlage verwendet werden, um dynamisch erstelltes HTML zu erzeugen.

```astro title="src/components/MeineLieblingspokemon.astro"
---
Expand Down Expand Up @@ -106,7 +106,7 @@ const { title } = Astro.props;
</ul>

<!-- Verwende eine Vorlagendirektive, um Klassennamen aus mehreren Strings oder sogar Objekten zu erstellen! -->
<p class:list={["add", "dynamic", {classNames: true}]} />
<p class:list={["add", "dynamic", { classNames: true }]} />
```

## Komponentenbasiertes Design
Expand All @@ -124,7 +124,6 @@ import Button from './Button.astro';
</div>
```


## Props (Komponenteneigenschaften)

Eine Astro-Komponente kann Props definieren und akzeptieren. Diese Props stehen dann der Komponentenvorlage zur Verfügung, um HTML zu rendern. Props sind im globalen Objekt `Astro.props` in deinem Frontmatter-Skript verfügbar.
Expand Down Expand Up @@ -219,7 +218,7 @@ import Wrapper from '../components/Wrapper.astro';

Dieses Muster ist die Grundlage einer Astro-Layout-Komponente: Eine ganze Seite mit HTML-Inhalt kann mit `<Layout></Layout>`-Tags „umhüllt“ und an die Layout-Komponente gesendet werden, um innerhalb der allgemeinen Seitenelemente gerendert zu werden.


<ReadMore>Weitere Möglichkeiten, auf Slot-Inhalte zuzugreifen und sie darzustellen, findest du unter den [`Astro.slots`-Hilfsfunktionen](/de/reference/astro-syntax/#astroslots).</ReadMore>

### Benannte Slots

Expand All @@ -238,12 +237,15 @@ const { title } = Astro.props;
---
<div id="content-wrapper">
<Header />
<slot name="after-header" /> <!-- Untergeordnete Elemente mit dem `slot="after-header"`-Attribut werden hier angezeigt -->
<!-- Untergeordnete Elemente mit dem `slot="after-header"`-Attribut werden hier angezeigt -->
<slot name="after-header" />
<Logo />
<h1>{title}</h1>
<slot /> <!-- Untergeordnete Elemente ohne `slot`, oder mit `slot="default"`-Attribut werden hier angezeigt -->
<!-- Untergeordnete Elemente ohne `slot`, oder mit `slot="default"`-Attribut werden hier angezeigt -->
<slot />
<Footer />
<slot name="after-footer" /> <!-- Untergeordnete Elemente mit dem `slot="after-footer"`-Attribut werden hier angezeigt -->
<!-- Untergeordnete Elemente mit dem `slot="after-footer"`-Attribut werden hier angezeigt -->
<slot name="after-footer" />
</div>
```

Expand All @@ -268,10 +270,9 @@ Verwende ein `slot="mein-slot"`-Attribut auf dem untergeordneten Element, das du

Um mehrere HTML-Elemente ohne ein umschließendes `<div>` in den `<slot/>`-Platzhalter einer Komponente zu übergeben, verwende das `slot=""`-Attribut auf [Astros <Fragment/>-Komponente](/de/reference/astro-syntax/#fragments):


```astro title="src/components/CustomTable.astro" '<slot name="header" />' '<slot name="body" />'
---
// Erstelle eine benutzerdefinierte Tabelle mit benannten Slot-Platzhaltern für Head- und Bodyinhalt
// Erstelle eine benutzerdefinierte Tabelle mit benannten Slot-Platzhaltern für Kopfzeilen- und Bodyinhalt
---
<table class="bg-white">
<thead class="sticky top-0 bg-white"><slot name="header" /></thead>
Expand All @@ -281,7 +282,7 @@ Um mehrere HTML-Elemente ohne ein umschließendes `<div>` in den `<slot/>`-Platz

Füge mehrere Zeilen und Spalten an HTML-Inhalten ein, indem du ein `slot=""`-Attribut verwendest, um die Inhalte `"header"` und `"body"` zu spezifizieren. Einzelne HTML-Elemente können auch gestylt werden:

```astro title="src/components/StockTable.astro" {5-7, 9-13} '<Fragment slot="header">' '<Fragment slot="body">'
```astro title="src/components/StockTable.astro" {5-7, 9-13} '<Fragment slot="header">' '<Fragment slot="body">' '</Fragment>'
---
import CustomTable from './CustomTable.astro';
---
Expand All @@ -304,9 +305,8 @@ Beachte, dass benannte Slots ein unmittelbar untergeordnetes Element der Kompone
Benannte Slots können auch an [UI-Framework-Komponenten](/de/guides/framework-components/) übergeben werden.
:::


:::note
Es ist nicht möglich, einen Astro-Slotnamen dynamisch zu generieren, wie etwa innerhalb einer Map-Funktion. Wenn diese Funktion innerhalb von UI-Framework-Komponenten benötigt wird, ist es möglicherweise am besten, diese dynamischen Slots innerhalb des Frameworks selbst zu generieren.
Es ist nicht möglich, einen Astro-Slotnamen dynamisch zu generieren, wie etwa innerhalb einer [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)-Funktion. Wenn diese Funktion innerhalb von UI-Framework-Komponenten benötigt wird, ist es möglicherweise am besten, diese dynamischen Slots innerhalb des Frameworks selbst zu generieren.
Comment thread
trueberryless marked this conversation as resolved.
Outdated
:::

### Fallback-Inhalte für Slots
Expand Down Expand Up @@ -334,7 +334,7 @@ const { title } = Astro.props;
</div>
```

Fallback-Inhalte werden nur angezeigt, wenn es keine passenden Elemente mit dem Attribut slot="name" gibt, die an einen benannten Slot übergeben werden.
Fallback-Inhalte werden nur angezeigt, wenn es keine passenden Elemente mit dem Attribut `slot="name"` gibt, die an einen benannten Slot übergeben werden.

Astro übergibt einen leeren Slot, wenn zwar ein Slot-Element existiert, aber kein Inhalt übergeben werden soll. Fallback-Inhalte können nicht als Standard verwendet werden, wenn ein leerer Slot übergeben wird. Fallback-Inhalte werden nur angezeigt, wenn kein Slot-Element gefunden werden kann.

Expand Down Expand Up @@ -395,7 +395,7 @@ Astro unterstützt das Importieren und Verwenden von `.html`-Dateien als Kompone
HTML-Komponenten müssen ausschließlich gültiges HTML enthalten und verfügen daher nicht über Schlüsselfunktionen von Astro-Komponenten:

- Sie unterstützen kein Frontmatter, keine serverseitigen Importe oder dynamische Ausdrücke.
- Jegliche `<script>`-Tags werden nicht gebündelt und so behandelt, als hätten sie die `is:inline`-Direktive.
- Jegliche `<script>`-Tags werden nicht gebündelt und so behandelt, als hätten sie eine [`is:inline`-Direktive](/de/reference/directives-reference/#isinline).
- Sie können nur auf [Assets verweisen, die sich im `public/`-Ordner befinden](/de/basics/project-structure/#public).

:::note
Expand Down
Loading