====== LU08b – Auftrag: Vue.js Accordion erkunden ====== **Ziel:** Sie begegnen zum ersten Mal Vue.js-Code. Es geht noch nicht darum, alles zu verstehen – sondern darum, Fragen zu stellen, Muster zu erkennen und zu entdecken, was anders ist als in Vanilla JS. ===== Vorbereitung ===== Öffnen Sie das folgende StackBlitz-Projekt: [[https://stackblitz.com/edit/vitejs-vite-gf1kjrts?file=src%2Fcomponents%2FAccordion.vue|→ StackBlitz: FAQ Accordion in Vue.js öffnen]] Sie sehen drei Dateien: * ''App.vue'' – der Einstiegspunkt der Applikation * ''Accordion.vue'' – die Accordion-Komponente mit den FAQ-Daten * ''AccordionItem.vue'' – eine einzelne Frage-Antwort-Einheit {{:de:modul:m291:learningunits:lu08:aufgaben:screenshot_2026-03-30_at_09.56.48.png?nolink&400| Ordner Struktur in Vuejs}} ===== Aufgabe 1 – Unbekanntes entdecken (5 Min.) ===== Lesen Sie den Code aller drei Dateien durch. Notieren Sie: - **Mindestens drei Dinge**, die Sie nicht kennen oder nicht verstehen. - **Mindestens zwei HTML-Attribute oder Tags**, die Sie so noch nie gesehen haben (Hinweis: schauen Sie im Template-Bereich). Es ist völlig normal, wenn vieles noch unklar ist. Notieren Sie Ihre Fragen – wir besprechen sie danach gemeinsam. ===== Aufgabe 2 – ref() untersuchen (5 Min.) ===== In ''AccordionItem.vue'' und ''Accordion.vue'' kommt ''ref()'' vor: const isOpen = ref(false); const faqData = ref([...]); Beantworten Sie folgende Fragen schriftlich: - Was könnte ''ref()'' bewirken? Was passiert wohl, wenn sich der Wert von ''isOpen'' ändert? - Was ist der Unterschied zu einer normalen Variable wie ''const isOpen = false''? ===== Aufgabe 3 – Daten erweitern (5 Min.) ===== Fügen Sie in ''Accordion.vue'' im ''faqData''-Array eine **fünfte Frage** mit einer eigenen Antwort hinzu: { question: 'Ihre eigene Frage hier?', answer: 'Ihre eigene Antwort hier.', }, Beobachten Sie, was im Browser passiert, und beantworten Sie: - Was erscheint im Browser, ohne dass Sie das HTML angepasst haben? - Wie haben wir beim alten Vanilla-JS-Accordion ein neues FAQ-Item hinzugefügt? Was ist der Unterschied? ===== Aufgabe 4 – Zustand verstehen (5 Min.) ===== Vergleichen Sie, wie der Zustand («offen» oder «geschlossen») gesteuert wird: ^ ^ Vanilla JS (alt) ^ Vue.js (neu) ^ | Wie wird das Element gefunden? | ''document.querySelectorAll('.accordion-btn')'' | ? | | Wo lebt der Zustand? | Im DOM (''classList.contains('open')'') | ? | | Wie wird umgeschaltet? | ''classList.add('open')'' | ? | Füllen Sie die rechte Spalte mit dem aus, was Sie im Vue-Code finden. ===== Aufgabe 5 – Den Fehler entdecken (5 Min.) ===== Testen Sie das Accordion im Browser: Öffnen Sie mehrere Panels nacheinander. - Was funktioniert **noch nicht** wie erwartet? - Warum könnte das so sein? Schauen Sie sich an, wo ''isOpen'' definiert ist – in welcher Datei, und für welche Einheit gilt es? - Was müsste sich ändern, damit immer nur ein Panel offen ist? Sie müssen das Problem noch **nicht lösen** – nur erkennen und beschreiben. Das lösen wir gemeinsam in LU09. ===== Zusammenfassung ===== Halten Sie zum Abschluss in 2–3 Sätzen fest: > **Was ist der grösste Unterschied zwischen dem Vanilla-JS-Accordion und dem Vue-Accordion?**