# Bygg en bankapp Del 1: HTML-mallar och rutter i en webbapp När Apollo 11:s styrdator navigerade till månen 1969, behövde den växla mellan olika program utan att starta om hela systemet. Moderna webbapplikationer fungerar på liknande sätt – de ändrar vad du ser utan att ladda om allt från början. Detta skapar den smidiga och responsiva upplevelse som användare förväntar sig idag. Till skillnad från traditionella webbplatser som laddar om hela sidor vid varje interaktion, uppdaterar moderna webbappar endast de delar som behöver ändras. Denna metod, ungefär som hur kontrollrummet växlar mellan olika skärmar samtidigt som konstant kommunikation upprätthålls, skapar den smidiga upplevelse vi har vant oss vid. Här är vad som gör skillnaden så dramatisk: | Traditionella fler-sidiga appar | Moderna en-sidiga appar | |---------------------------------|-------------------------| | **Navigering** | Hela sidan laddas om för varje skärm | Omedelbar växling av innehåll | | **Prestanda** | Långsammare på grund av fullständiga HTML-nedladdningar | Snabbare med partiella uppdateringar | | **Användarupplevelse** | Ryckiga sidövergångar | Smidiga, app-liknande övergångar | | **Dela data** | Svårt mellan sidor | Enkel hantering av tillstånd | | **Utveckling** | Flera HTML-filer att underhålla | En HTML-fil med dynamiska mallar | **Förstå utvecklingen:** - **Traditionella appar** kräver serverförfrågningar för varje navigeringsåtgärd - **Moderna SPAs** laddas en gång och uppdaterar innehållet dynamiskt med JavaScript - **Användarförväntningar** föredrar nu omedelbara, sömlösa interaktioner - **Prestandafördelar** inkluderar minskad bandbredd och snabbare svarstider I denna lektion ska vi bygga en bankapp med flera skärmar som flyter samman smidigt. Precis som forskare använder modulära instrument som kan omkonfigureras för olika experiment, kommer vi att använda HTML-mallar som återanvändbara komponenter som kan visas vid behov. Du kommer att arbeta med HTML-mallar (återanvändbara ritningar för olika skärmar), JavaScript-routing (systemet som växlar mellan skärmar) och webbläsarens historik-API (som håller bakåtknappen fungerande som förväntat). Dessa är samma grundläggande tekniker som används av ramverk som React, Vue och Angular. I slutet kommer du att ha en fungerande bankapp som demonstrerar professionella principer för en-sidiga applikationer. ## Förberedande quiz [Förberedande quiz](https://ff-quizzes.netlify.app/web/quiz/41) ### Vad du behöver Vi behöver en lokal webbserver för att testa vår bankapp – oroa dig inte, det är enklare än det låter! Om du inte redan har en installerad, installera bara [Node.js](https://nodejs.org) och kör `npx lite-server` från din projektmapp. Detta praktiska kommando startar en lokal server och öppnar automatiskt din app i webbläsaren. ### Förberedelse På din dator, skapa en mapp som heter `bank` med en fil som heter `index.html` inuti. Vi börjar med denna HTML [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Detta boilerplate ger:** - **Etablerar** HTML5-dokumentstrukturen med korrekt DOCTYPE-deklaration - **Konfigurerar** teckenkodning som UTF-8 för internationellt textstöd - **Aktiverar** responsiv design med viewport meta-taggen för mobilkompatibilitet - **Sätter** en beskrivande titel som visas i webbläsarens flik - **Skapar** en ren body-sektion där vi bygger vår applikation > 📁 **Projektstrukturförhandsvisning** > > **I slutet av denna lektion kommer ditt projekt att innehålla:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Filansvar:** > - **index.html**: Innehåller alla mallar och ger appens struktur > - **app.js**: Hanterar routing, navigering och mallhantering > - **Mallar**: Definierar användargränssnittet för inloggning, dashboard och andra skärmar --- ## HTML-mallar Mallar löser ett grundläggande problem inom webbutveckling. När Gutenberg uppfann tryckpressen med rörliga typer på 1440-talet insåg han att istället för att rista hela sidor, kunde han skapa återanvändbara bokstavsblock och arrangera dem vid behov. HTML-mallar fungerar på samma princip – istället för att skapa separata HTML-filer för varje skärm, definierar du återanvändbara strukturer som kan visas vid behov. Tänk på mallar som ritningar för olika delar av din app. Precis som en arkitekt skapar en ritning och använder den flera gånger istället för att rita identiska rum, skapar vi mallar en gång och instansierar dem vid behov. Webbläsaren håller dessa mallar dolda tills JavaScript aktiverar dem. Om du vill skapa flera skärmar för en webbsida, skulle en lösning vara att skapa en HTML-fil för varje skärm du vill visa. Men denna lösning har vissa nackdelar: - Du måste ladda om hela HTML-filen när du byter skärm, vilket kan vara långsamt. - Det är svårt att dela data mellan de olika skärmarna. Ett annat tillvägagångssätt är att ha endast en HTML-fil och definiera flera [HTML-mallar](https://developer.mozilla.org/docs/Web/HTML/Element/template) med hjälp av `