# Bouw een Bankapp Deel 1: HTML-sjablonen en Routes in een Webapp ```mermaid journey title Your Banking App Development Journey section SPA Fundamentals Understand single-page apps: 3: Student Learn template concepts: 4: Student Master DOM manipulation: 4: Student section Routing Systems Implement client-side routing: 4: Student Handle browser history: 5: Student Create navigation systems: 5: Student section Professional Patterns Build modular architecture: 5: Student Apply best practices: 5: Student Create user experiences: 5: Student ``` Toen de Apollo 11-geleidingscomputer in 1969 naar de maan navigeerde, moest deze schakelen tussen verschillende programma's zonder het hele systeem opnieuw op te starten. Moderne webapplicaties werken op een vergelijkbare manier – ze veranderen wat je ziet zonder alles opnieuw te laden. Dit zorgt voor de soepele, responsieve ervaring die gebruikers tegenwoordig verwachten. In tegenstelling tot traditionele websites die hele pagina's opnieuw laden bij elke interactie, werken moderne webapps alleen de delen bij die moeten veranderen. Deze aanpak, vergelijkbaar met hoe de missiecontrole schakelt tussen verschillende schermen terwijl constante communicatie behouden blijft, creëert die vloeiende ervaring waar we aan gewend zijn geraakt. Dit maakt het verschil zo opvallend: | Traditionele Multi-Page Apps | Moderne Single-Page Apps | |-----------------------------|--------------------------| | **Navigatie** | Volledige paginareload voor elk scherm | Directe inhoudswisseling | | **Prestaties** | Langzamer door volledige HTML-downloads | Sneller met gedeeltelijke updates | | **Gebruikerservaring** | Schokkerige paginawisselingen | Soepele, app-achtige overgangen | | **Gegevensdeling** | Moeilijk tussen pagina's | Eenvoudig beheer van de status | | **Ontwikkeling** | Meerdere HTML-bestanden om te onderhouden | Eén HTML met dynamische sjablonen | **Begrijp de evolutie:** - **Traditionele apps** vereisen serververzoeken voor elke navigatieactie - **Moderne SPAs** laden één keer en werken inhoud dynamisch bij met JavaScript - **Gebruikersverwachtingen** geven nu de voorkeur aan directe, naadloze interacties - **Prestatievoordelen** omvatten verminderde bandbreedte en snellere reacties In deze les bouwen we een bankapp met meerdere schermen die naadloos in elkaar overlopen. Net zoals wetenschappers modulaire instrumenten gebruiken die kunnen worden geconfigureerd voor verschillende experimenten, gebruiken wij HTML-sjablonen als herbruikbare componenten die naar behoefte kunnen worden weergegeven. Je werkt met HTML-sjablonen (herbruikbare blauwdrukken voor verschillende schermen), JavaScript-routing (het systeem dat schakelt tussen schermen) en de geschiedenis-API van de browser (die ervoor zorgt dat de terugknop naar verwachting werkt). Dit zijn dezelfde fundamentele technieken die worden gebruikt door frameworks zoals React, Vue en Angular. Aan het einde heb je een werkende bankapp die professionele principes van single-page applicaties demonstreert. ```mermaid mindmap root((Single-Page Applications)) Architecture Template System Client-side Routing State Management Event Handling Templates Reusable Components Dynamic Content DOM Manipulation Content Switching Routing URL Management History API Navigation Logic Browser Integration User Experience Fast Navigation Smooth Transitions Consistent State Modern Interactions Performance Reduced Server Requests Faster Page Transitions Efficient Resource Usage Better Responsiveness ``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/41) ### Wat Heb Je Nodig We hebben een lokale webserver nodig om onze bankapp te testen – maak je geen zorgen, het is eenvoudiger dan het klinkt! Als je er nog geen hebt ingesteld, installeer dan gewoon [Node.js](https://nodejs.org) en voer `npx lite-server` uit vanuit je projectmap. Deze handige opdracht start een lokale server en opent je app automatisch in de browser. ### Voorbereiding Maak op je computer een map genaamd `bank` met daarin een bestand genaamd `index.html`. We beginnen met deze HTML [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Wat deze boilerplate biedt:** - **Stelt** de HTML5-documentstructuur in met de juiste DOCTYPE-verklaring - **Configureert** tekencodering als UTF-8 voor internationale tekstondersteuning - **Maakt** responsief ontwerp mogelijk met de viewport meta tag voor mobiele compatibiliteit - **Stelt** een beschrijvende titel in die in het browsertabblad verschijnt - **Creëert** een schone body-sectie waar we onze applicatie gaan bouwen > 📁 **Projectstructuur Voorbeeld** > > **Aan het einde van deze les bevat je project:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Bestandsverantwoordelijkheden:** > - **index.html**: Bevat alle sjablonen en biedt de appstructuur > - **app.js**: Behandelt routing, navigatie en sjabloonbeheer > - **Sjablonen**: Definieert de UI voor inloggen, dashboard en andere schermen --- ## HTML-sjablonen Sjablonen lossen een fundamenteel probleem in webontwikkeling op. Toen Gutenberg in de jaren 1440 de boekdrukkunst met losse letters uitvond, realiseerde hij zich dat hij in plaats van hele pagina's te snijden, herbruikbare letterblokken kon maken en ze naar behoefte kon rangschikken. HTML-sjablonen werken volgens hetzelfde principe – in plaats van aparte HTML-bestanden voor elk scherm te maken, definieer je herbruikbare structuren die kunnen worden weergegeven wanneer dat nodig is. ```mermaid flowchart TD A["📋 Template Definition"] --> B["💬 Hidden in DOM"] B --> C["🔍 JavaScript Finds Template"] C --> D["📋 Clone Template Content"] D --> E["🔗 Attach to Visible DOM"] E --> F["👁️ User Sees Content"] G["Login Template"] --> A H["Dashboard Template"] --> A I["Future Templates"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` Zie sjablonen als blauwdrukken voor verschillende delen van je app. Net zoals een architect één blauwdruk maakt en deze meerdere keren gebruikt in plaats van identieke kamers opnieuw te tekenen, maken wij sjablonen één keer en gebruiken we ze wanneer nodig. De browser houdt deze sjablonen verborgen totdat JavaScript ze activeert. Als je meerdere schermen voor een webpagina wilt maken, zou je één HTML-bestand kunnen maken voor elk scherm dat je wilt weergeven. Deze oplossing brengt echter enkele ongemakken met zich mee: - Je moet de hele HTML opnieuw laden bij het wisselen van scherm, wat traag kan zijn. - Het is moeilijk om gegevens te delen tussen de verschillende schermen. Een andere aanpak is om slechts één HTML-bestand te hebben en meerdere [HTML-sjablonen](https://developer.mozilla.org/docs/Web/HTML/Element/template) te definiëren met behulp van het `