Die Seite aus Daten zeichnen
Geladene Daten sind meistens ein Array von Objekten, und die Seite zeigt sie so an, wie du es aus der Lektion über Webseiten kennst: Eine Funktion leert die Liste und erstellt in einer Schleife Elemente für die Einträge. Neu ist, woher das Array kommt. Speichere es in einer Variable außerhalb der Funktionen, damit die Seite jedes Mal neu gezeichnet werden kann, wenn der Nutzer etwas ändert, ohne den Server noch einmal zu fragen:
let buecher = [];
function zeigeBuecher() {
buchListe.textContent = "";
const verfuegbar = buecher.filter((buch) => buch.verfuegbar);
for (const buch of verfuegbar) {
const eintrag = document.createElement("li");
const titel = document.createElement("h2");
titel.textContent = buch.titel;
const autor = document.createElement("p");
autor.textContent = buch.autor;
eintrag.append(titel, autor);
buchListe.append(eintrag);
}
}
async function ladeBuecher() {
const antwort = await fetch("buecher.json");
buecher = await antwort.json();
zeigeBuecher();
}
ladeBuecher();Ein paar Dinge fallen auf:
buechersteht außerhalb der Funktionen und wird mitletund einem leeren Array erstellt.ladeBuecher()legt das geladene Array hinein, undzeigeBuecher()zeichnet die Seite daraus. Sobald die Daten da sind, kann jede andere Funktion sie auch benutzen.filter()gibt ein neues Array zurück und lässtbuecherunverändert, also sind beim nächsten Zeichnen wieder alle Bücher da. Die anderen Array-Methoden, wiesort(),find()undmap(), funktionieren mit geladenen Daten wie mit jedem anderen Array.- Jeder Eintrag hat Elemente in sich: eine Überschrift und einen Absatz. Erstelle sie ebenfalls mit
createElement()und setze sie mitappend()in den Eintrag, das mehrere Elemente auf einmal annehmen kann.
Wenn der Nutzer auf der Seite etwas auswählt, ruft sein Handler nur wieder zeigeBuecher() auf. Die Funktion liest, was ausgewählt ist, und zeichnet die Liste neu. Der Server wird nicht noch einmal gefragt: Die Daten sind schon im Array.
So schreibst du es:
Anweisungen
- 1
Vervollständige
zeigeTiere(): LeeretierListeund hänge für jedes Tier intiereeinlidaran an, mit zwei Elementen darin: einemh2mit dem Namen des Tieres und einempmit einem Text wieHund, 3 Jahre alt. - 2
Lass die Auswahl in
artAuswahlfunktionieren. Wähle inzeigeTiere()mitfilter()nur die Tiere aus, derenartder Wert vonartAuswahlist, oder alle, wenn der Wert"alle"ist. Und wenn sich der Wert des Selects ändert (das Ereignischange), rufezeigeTiere()noch einmal auf.