# Bygg en bankapp del 1: HTML-maler og ruter i en webapp Da Apollo 11s navigasjonsdatamaskin navigerte til månen i 1969, måtte den bytte mellom ulike programmer uten å starte hele systemet på nytt. Moderne webapplikasjoner fungerer på lignende måte – de endrer det du ser uten å laste alt fra bunnen av. Dette skaper den jevne, responsive opplevelsen brukere forventer i dag. I motsetning til tradisjonelle nettsteder som laster hele sider på nytt for hver interaksjon, oppdaterer moderne webapper bare de delene som trenger endring. Denne tilnærmingen, som hvordan kontrollsenteret bytter mellom ulike skjermer mens de opprettholder konstant kommunikasjon, skaper den flytende opplevelsen vi har blitt vant til. Her er hva som gjør forskjellen så dramatisk: | Tradisjonelle fler-sides apper | Moderne én-side apper | |-------------------------------|-----------------------| | **Navigasjon** | Full sideopplasting for hver skjerm | Øyeblikkelig innholdsskifting | | **Ytelse** | Langsommere på grunn av fullstendige HTML-nedlastinger | Raskere med delvise oppdateringer | | **Brukeropplevelse** | Ubehagelige sideblink | Jevne, app-lignende overganger | | **Datadeling** | Vanskelig mellom sider | Enkel tilstandshåndtering | | **Utvikling** | Flere HTML-filer å vedlikeholde | Én HTML med dynamiske maler | **Forstå utviklingen:** - **Tradisjonelle apper** krever serverforespørsler for hver navigasjonshandling - **Moderne SPAs** laster én gang og oppdaterer innhold dynamisk med JavaScript - **Brukerforventninger** favoriserer nå øyeblikkelige, sømløse interaksjoner - **Ytelsesfordeler** inkluderer redusert båndbredde og raskere responser I denne leksjonen skal vi bygge en bankapp med flere skjermer som flyter sømløst sammen. Akkurat som forskere bruker modulære instrumenter som kan omkonfigureres for ulike eksperimenter, skal vi bruke HTML-maler som gjenbrukbare komponenter som kan vises etter behov. Du vil jobbe med HTML-maler (gjenbrukbare blåkopier for ulike skjermer), JavaScript-ruting (systemet som bytter mellom skjermer), og nettleserens historikk-API (som holder tilbake-knappen fungerende som forventet). Dette er de samme grunnleggende teknikkene som brukes av rammeverk som React, Vue og Angular. Ved slutten av leksjonen vil du ha en fungerende bankapp som demonstrerer profesjonelle prinsipper for én-side applikasjoner. ## Quiz før leksjonen [Quiz før leksjonen](https://ff-quizzes.netlify.app/web/quiz/41) ### Hva du trenger Vi trenger en lokal webserver for å teste bankappen vår – ikke bekymre deg, det er enklere enn det høres ut! Hvis du ikke allerede har en satt opp, installer bare [Node.js](https://nodejs.org) og kjør `npx lite-server` fra prosjektmappen din. Denne praktiske kommandoen starter en lokal server og åpner automatisk appen din i nettleseren. ### Forberedelse På datamaskinen din, opprett en mappe kalt `bank` med en fil kalt `index.html` inni. Vi starter med denne HTML [grunnstrukturen](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Her er hva denne grunnstrukturen gir:** - **Etablerer** HTML5-dokumentstrukturen med riktig DOCTYPE-deklarasjon - **Konfigurerer** tegnkoding som UTF-8 for internasjonal tekststøtte - **Aktiverer** responsivt design med viewport meta-taggen for mobilkompatibilitet - **Setter** en beskrivende tittel som vises i nettleserfanen - **Oppretter** en ren body-seksjon hvor vi skal bygge applikasjonen vår > 📁 **Forhåndsvisning av prosjektstruktur** > > **Ved slutten av denne leksjonen vil prosjektet ditt inneholde:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Filansvar:** > - **index.html**: Inneholder alle maler og gir appstrukturen > - **app.js**: Håndterer ruting, navigasjon og maladministrasjon > - **Maler**: Definerer brukergrensesnittet for innlogging, dashbord og andre skjermer --- ## HTML-maler Maler løser et grunnleggende problem i webutvikling. Da Gutenberg oppfant bevegelig type trykking på 1440-tallet, innså han at i stedet for å skjære ut hele sider, kunne han lage gjenbrukbare bokstavblokker og arrangere dem etter behov. HTML-maler fungerer på samme prinsipp – i stedet for å lage separate HTML-filer for hver skjerm, definerer du gjenbrukbare strukturer som kan vises når det trengs. Tenk på maler som blåkopier for ulike deler av appen din. Akkurat som en arkitekt lager én blåkopi og bruker den flere ganger i stedet for å tegne identiske rom på nytt, lager vi maler én gang og instansierer dem etter behov. Nettleseren holder disse malene skjult til JavaScript aktiverer dem. Hvis du vil lage flere skjermer for en nettside, kan én løsning være å lage én HTML-fil for hver skjerm du vil vise. Men denne løsningen har noen ulemper: - Du må laste hele HTML på nytt når du bytter skjerm, noe som kan være tregt. - Det er vanskelig å dele data mellom de ulike skjermene. En annen tilnærming er å ha bare én HTML-fil, og definere flere [HTML-maler](https://developer.mozilla.org/docs/Web/HTML/Element/template) ved hjelp av `