ToDo-App – Vue 3 + Vite
Unterrichtsbeispiel für Web Development an der FHGR.
Eine einfache ToDo-Anwendung mit Vue 3, Vite und einer REST-API.
Projektstruktur
WebDev-VueJS-ToDo-Example/
├── index.html # HTML-Einstiegspunkt (enthält <div id="app">)
├── vite.config.js # Vite-Konfiguration (aktiviert Vue-Plugin)
├── package.json # Abhängigkeiten und npm-Skripte
└── src/
├── main.js # Vue-App erstellen und mounten
├── api.js # API-Schicht: alle HTTP-Aufrufe (fetch)
└── App.vue # Haupt-Komponente: State, Logik und Template
Verwendete Technologien
| Technologie | Zweck |
|---|---|
| Vue 3 | Reaktives UI-Framework |
| Vite | Build-Tool und Dev-Server |
| Fetch API | HTTP-Anfragen (nativ im Browser, kein axios nötig) |
| CSS Custom Properties | Design ohne externe Libraries |
Starten
npm install # Abhängigkeiten installieren
npm run dev # Entwicklungsserver starten (http://localhost:5173)
npm run build # Produktionsbuild erstellen (→ dist/)
npm run preview # Produktionsbuild lokal testen
Lernziele / Vue-Konzepte
Reaktivität
ref()– reaktiver Einzelwertcomputed()– abgeleiteter, gecachter Wertwatch()– Reaktion auf Änderungen einer Variable
Template-Syntax
{{ }}– Textinterpolationv-if/v-else– bedingtes Rendernv-for+:key– Listen rendernv-model– Zwei-Wege-Datenbindung (Input ↔ Variable):class– dynamische CSS-Klassen@click,@submit.prevent– Event-Handler
Lifecycle
onMounted()– Code nach dem ersten Rendern ausführenonUnmounted()– Aufräumen (z.B.setIntervalstoppen)
Architektur
- Trennung von API-Schicht (
api.js) und UI-Logik (App.vue) - Alle HTTP-Methoden:
GET,POST,PATCH,DELETE - Auto-Synchronisation im 5-Sekunden-Takt mit Datenvergleich
Auto-Synchronisation (5 Sekunden)
Die App lädt alle 5 Sekunden die aktuell sichtbaren ToDos neu und vergleicht sie mit der bereits gerenderten Liste.
Verglichen werden pro ToDo:
id(neu/gelöscht)title,completed,userId(geändert)
Wenn Unterschiede erkannt werden, wird die Liste ersetzt und Vue aktualisiert das DOM automatisch.
Wenn keine Unterschiede erkannt werden, bleibt der DOM unverändert.
Im UI zeigt eine Statuszeile den letzten Synchronisationszeitpunkt und das Ergebnis des Vergleichs (neu/geändert/gelöscht oder keine Änderung).
API
Basis-URL: https://webdev.iten-web.ch/10003/api/
Die API verwendet REST-Pfad-Routing (Best Practice):
GET /10003/api/todos → alle ToDos
GET /10003/api/todos/1 → einzelnes ToDo
POST /10003/api/todos → neues ToDo erstellen
PATCH /10003/api/todos/1 → Status aktualisieren
DELETE /10003/api/todos/1 → ToDo löschen
Verfügbare Filter-Parameter:
page,limit– Paginationsearch– Suche im Titelcompleted– Filter:true/falsesortBy– Sortierfeld:id,title,completedsortDir– Richtung:ASC,DESC
Description
Languages
Vue
76%
JavaScript
21.9%
HTML
2.1%