# Byg en Bankapp Del 1: HTML-skabeloner og Ruter i en Webapp Da Apollo 11's navigationscomputer fløj til månen i 1969, måtte den skifte mellem forskellige programmer uden at genstarte hele systemet. Moderne webapplikationer fungerer på samme måde – de ændrer, hvad du ser, uden at genindlæse alt fra bunden. Dette skaber den glatte, responsive oplevelse, som brugerne forventer i dag. I modsætning til traditionelle hjemmesider, der genindlæser hele sider ved hver interaktion, opdaterer moderne webapps kun de dele, der skal ændres. Denne tilgang, ligesom hvordan mission control skifter mellem forskellige skærme, mens de opretholder konstant kommunikation, skaber den flydende oplevelse, vi er blevet vant til. Her er, hvad der gør forskellen så markant: | Traditionelle Multi-Page Apps | Moderne Single-Page Apps | |------------------------------|--------------------------| | **Navigation** | Genindlæsning af hele siden for hver skærm | Øjeblikkelig indholdsskift | | **Ydeevne** | Langsommere på grund af komplette HTML-downloads | Hurtigere med delvise opdateringer | | **Brugeroplevelse** | Forstyrrende sideblink | Glatte, app-lignende overgange | | **Dataudveksling** | Svært mellem sider | Nem tilstandshåndtering | | **Udvikling** | Flere HTML-filer at vedligeholde | En enkelt HTML med dynamiske skabeloner | **Forstå udviklingen:** - **Traditionelle apps** kræver serveranmodninger for hver navigationshandling - **Moderne SPAs** indlæses én gang og opdaterer indhold dynamisk med JavaScript - **Brugerforventninger** favoriserer nu øjeblikkelige, problemfri interaktioner - **Ydeevnefordele** inkluderer reduceret båndbredde og hurtigere svar I denne lektion vil vi bygge en bankapp med flere skærme, der flyder sammen problemfrit. Ligesom hvordan forskere bruger modulære instrumenter, der kan omkonfigureres til forskellige eksperimenter, vil vi bruge HTML-skabeloner som genanvendelige komponenter, der kan vises efter behov. Du vil arbejde med HTML-skabeloner (genanvendelige skabeloner til forskellige skærme), JavaScript-routing (systemet, der skifter mellem skærme), og browserens historik-API (som holder tilbage-knappen fungerende som forventet). Dette er de samme grundlæggende teknikker, som bruges af frameworks som React, Vue og Angular. Ved slutningen vil du have en fungerende bankapp, der demonstrerer professionelle principper for single-page applikationer. ## Quiz før lektionen [Quiz før lektionen](https://ff-quizzes.netlify.app/web/quiz/41) ### Hvad du skal bruge Vi skal bruge en lokal webserver til at teste vores bankapp – bare rolig, det er nemmere, end det lyder! Hvis du ikke allerede har en opsat, skal du blot installere [Node.js](https://nodejs.org) og køre `npx lite-server` fra din projektmappe. Denne smarte kommando starter en lokal server og åbner automatisk din app i browseren. ### Forberedelse På din computer skal du oprette en mappe kaldet `bank` med en fil kaldet `index.html` indeni. Vi starter med denne HTML [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Her er, hvad denne boilerplate giver:** - **Etablerer** HTML5-dokumentstrukturen med korrekt DOCTYPE-deklaration - **Konfigurerer** tegnkodning som UTF-8 for international tekstunderstøttelse - **Muliggør** responsivt design med viewport meta-tagget for mobilkompatibilitet - **Sætter** en beskrivende titel, der vises i browserfanen - **Skaber** en ren body-sektion, hvor vi bygger vores applikation > 📁 **Projektstruktur Forhåndsvisning** > > **Ved slutningen af denne lektion vil dit projekt indeholde:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Filansvar:** > - **index.html**: Indeholder alle skabeloner og giver appens struktur > - **app.js**: Håndterer routing, navigation og skabelonstyring > - **Skabeloner**: Definerer UI for login, dashboard og andre skærme --- ## HTML-skabeloner Skabeloner løser et grundlæggende problem i webudvikling. Da Gutenberg opfandt den bevægelige type trykning i 1440'erne, indså han, at i stedet for at udskære hele sider, kunne han skabe genanvendelige bogstavblokke og arrangere dem efter behov. HTML-skabeloner fungerer på samme princip – i stedet for at skabe separate HTML-filer for hver skærm, definerer du genanvendelige strukturer, der kan vises, når det er nødvendigt. Tænk på skabeloner som tegninger for forskellige dele af din app. Ligesom en arkitekt skaber én tegning og bruger den flere gange i stedet for at tegne identiske rum igen, skaber vi skabeloner én gang og bruger dem efter behov. Browseren holder disse skabeloner skjult, indtil JavaScript aktiverer dem. Hvis du vil oprette flere skærme til en webside, kunne en løsning være at oprette en HTML-fil for hver skærm, du vil vise. Men denne løsning har nogle ulemper: - Du skal genindlæse hele HTML'en, når du skifter skærm, hvilket kan være langsomt. - Det er svært at dele data mellem de forskellige skærme. En anden tilgang er kun at have én HTML-fil og definere flere [HTML-skabeloner](https://developer.mozilla.org/docs/Web/HTML/Element/template) ved hjælp af `