# Bygg en bankapp del 1: HTML-mallar och rutter i en webbapp ```mermaid journey title Din utvecklingsresa för bankappen section SPA-grunder Förstå enkelsidiga appar: 3: Student Lär dig mallkoncept: 4: Student Bemästra DOM-manipulation: 4: Student section Rutteringssystem Implementera klient-sidrouting: 4: Student Hantera webbläsarhistorik: 5: Student Skapa navigationssystem: 5: Student section Professionella mönster Bygg modulär arkitektur: 5: Student Tillämpa bästa praxis: 5: Student Skapa användarupplevelser: 5: Student ``` När Apollo 11:s styrdator navigerade till månen 1969, var den tvungen att 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, responsiva upplevelse som användare förväntar sig idag. Till skillnad från traditionella webbplatser som laddar om hela sidor för varje interaktion, uppdaterar moderna webbappar endast de delar som behöver ändras. Detta tillvägagångssätt, ungefär som hur kontrollrummet byter mellan olika vyer samtidigt som kontakten bibehålls, skapar den flytande upplevelse vi vant oss vid. Här är vad som gör skillnaden så dramatisk: | Traditionella flersidiga appar | Moderna enkelsidiga appar | |----------------------------|-------------------------| | **Navigering** | Hela sidan laddas om för varje skärm | Omedelbart innehållsbyte | | **Prestanda** | Långsammare på grund av fullständig HTML-nedladdning | Snabbare med partiella uppdateringar | | **Användarupplevelse** | Ryckiga sidövergångar | Smidiga, app-liknande övergångar | | **Dataspridning** | Svårt mellan sidor | Enkel hantering av tillstånd | | **Utveckling** | Flera HTML-filer att underhålla | En HTML med dynamiska mallar | **Förstå utvecklingen:** - **Traditionella appar** kräver serverförfrågningar för varje navigeringshandling - **Moderna SPA:er** laddar en gång och uppdaterar innehåll dynamiskt med JavaScript - **Användarnas förväntningar** är idag för omedelbara, sömlösa interaktioner - **Prestandafördelar** inkluderar reducerad bandbredd och snabbare svarstider I den här lektionen bygger vi en bankapp med flera skärmar som flyter ihop sömlöst. Precis som forskare använder modulära instrument som kan konfigureras om för olika experiment, använder vi HTML-mallar som återanvändbara komponenter som 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 history-API (som håller tillbaka-knappen fungerande som vä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 enkelsidiga applikationer. ```mermaid mindmap root((Single-Page Applikationer)) Architecture Template System Client-side Routing State Management Event Handling Templates Återanvändbara Komponenter Dynamiskt Innehåll DOM-Manipulation Innehållsbyte Routing URL-Hantering Historia API Navigationslogik Browser Integration User Experience Snabb Navigation Mjuka Övergångar Konsekvent Tillstånd Moderna Interaktioner Performance Minskade Serverförfrågningar Snabbare Sidövergångar Effektiv Resursanvändning Bättre Responsivitet ``` ## För-foreläsningsquiz [För-foreläsningsquiz](https://ff-quizzes.netlify.app/web/quiz/41) ### Vad du behöver Vi kommer att behöva en lokal webbserver för att testa vår bankapp – oroa dig inte, det är lättare än det låter! Om du inte redan har en sådan installerad, installera bara [Node.js](https://nodejs.org) och kör `npx lite-server` från din projektmapp. Det här praktiska kommandot startar en lokal server och öppnar automatiskt din app i webbläsaren. ### Förberedelse På din dator skapar du en mapp som heter `bank` med en fil som heter `index.html` inuti. Vi börjar med den här HTML [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Här är vad denna boilerplate ger:** - **Fastställer** HTML5-dokumentstruktur 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äsarfliken - **Skapar** en ren body-sektion där vi bygger vår applikation > 📁 **Förhandsvisning av projektstruktur** > > **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 tillhandahåller appens struktur > - **app.js**: Hanterar routing, navigering och mallhantering > - **Mallar**: Definierar UI för inloggning, dashboard och andra skärmar --- ## HTML-mallar Mallar löser en grundläggande utmaning inom webbutveckling. När Gutenberg uppfann boktryckarkonsten med rörliga typer på 1440-talet insåg han att istället för att snida ut 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 man återanvändbara strukturer som kan visas vid behov. ```mermaid flowchart TD A["📋 Malldefinition"] --> B["💬 Gömda i DOM"] B --> C["🔍 JavaScript Hittar Mall"] C --> D["📋 Klona Mallinnehåll"] D --> E["🔗 Fästa till Synlig DOM"] E --> F["👁️ Användaren Ser Innehåll"] G["Inloggningsmall"] --> A H["Instrumentpanelsmall"] --> A I["Framtida Mallar"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` 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 om och om igen, skapar vi mallar en gång och instansierar dem när det behövs. 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 kommer med vissa nackdelar: - Du måste ladda om hela HTML när du växlar skärm, vilket kan vara långsamt. - Det är svårt att dela data mellan olika skärmar. 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 `