# Costruire un'app bancaria Parte 1: Modelli HTML e rotte in un'app web ```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 ``` Quando il computer di guida dell'Apollo 11 navigò verso la luna nel 1969, doveva passare tra diversi programmi senza riavviare l'intero sistema. Le moderne applicazioni web funzionano in modo simile: cambiano ciò che vedi senza ricaricare tutto da zero. Questo crea l'esperienza fluida e reattiva che gli utenti si aspettano oggi. A differenza dei siti web tradizionali che ricaricano intere pagine per ogni interazione, le moderne app web aggiornano solo le parti che necessitano di modifiche. Questo approccio, simile a come il controllo missione passa tra diversi display mantenendo una comunicazione costante, crea quell'esperienza fluida a cui siamo abituati. Ecco cosa rende la differenza così evidente: | App tradizionali multi-pagina | App moderne a pagina singola | |------------------------------|-----------------------------| | **Navigazione** | Ricarica completa della pagina per ogni schermata | Cambio istantaneo dei contenuti | | **Prestazioni** | Più lente a causa del download completo di HTML | Più veloci con aggiornamenti parziali | | **Esperienza utente** | Flash di pagina bruschi | Transizioni fluide, simili a un'app | | **Condivisione dati** | Difficile tra le pagine | Gestione dello stato facile | | **Sviluppo** | Più file HTML da mantenere | Un singolo HTML con modelli dinamici | **Comprendere l'evoluzione:** - **App tradizionali** richiedono richieste al server per ogni azione di navigazione - **SPA moderne** si caricano una volta e aggiornano i contenuti dinamicamente usando JavaScript - **Le aspettative degli utenti** ora favoriscono interazioni istantanee e senza interruzioni - **Benefici prestazionali** includono una riduzione della larghezza di banda e risposte più rapide In questa lezione, costruiremo un'app bancaria con più schermate che fluiscono insieme senza interruzioni. Come gli scienziati usano strumenti modulari che possono essere riconfigurati per diversi esperimenti, utilizzeremo modelli HTML come componenti riutilizzabili che possono essere visualizzati secondo necessità. Lavorerai con modelli HTML (progetti riutilizzabili per diverse schermate), routing JavaScript (il sistema che passa tra le schermate) e l'API di cronologia del browser (che mantiene il pulsante indietro funzionante come previsto). Queste sono le stesse tecniche fondamentali utilizzate da framework come React, Vue e Angular. Alla fine, avrai un'app bancaria funzionante che dimostra i principi professionali delle applicazioni a pagina singola. ```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 ``` ## Quiz Pre-Lezione [Quiz pre-lezione](https://ff-quizzes.netlify.app/web/quiz/41) ### Cosa Ti Serve Avremo bisogno di un server web locale per testare la nostra app bancaria – non preoccuparti, è più facile di quanto sembri! Se non ne hai già uno configurato, installa semplicemente [Node.js](https://nodejs.org) e esegui `npx lite-server` dalla tua cartella di progetto. Questo comando pratico avvia un server locale e apre automaticamente la tua app nel browser. ### Preparazione Sul tuo computer, crea una cartella chiamata `bank` con un file chiamato `index.html` al suo interno. Partiremo da questo [boilerplate HTML](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Ecco cosa fornisce questo boilerplate:** - **Stabilisce** la struttura del documento HTML5 con una corretta dichiarazione DOCTYPE - **Configura** la codifica dei caratteri come UTF-8 per il supporto del testo internazionale - **Abilita** il design responsivo con il meta tag viewport per la compatibilità mobile - **Imposta** un titolo descrittivo che appare nella scheda del browser - **Crea** una sezione corpo pulita dove costruiremo la nostra applicazione > 📁 **Anteprima della Struttura del Progetto** > > **Alla fine di questa lezione, il tuo progetto conterrà:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Responsabilità dei file:** > - **index.html**: Contiene tutti i modelli e fornisce la struttura dell'app > - **app.js**: Gestisce il routing, la navigazione e la gestione dei modelli > - **Modelli**: Definiscono l'interfaccia utente per login, dashboard e altre schermate --- ## Modelli HTML I modelli risolvono un problema fondamentale nello sviluppo web. Quando Gutenberg inventò la stampa a caratteri mobili negli anni '40 del Quattrocento, si rese conto che invece di scolpire intere pagine, poteva creare blocchi di lettere riutilizzabili e disporli secondo necessità. I modelli HTML funzionano sullo stesso principio: invece di creare file HTML separati per ogni schermata, definisci strutture riutilizzabili che possono essere visualizzate quando necessario. ```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 ``` Pensa ai modelli come progetti per diverse parti della tua app. Proprio come un architetto crea un progetto e lo utilizza più volte invece di ridisegnare stanze identiche, noi creiamo modelli una volta e li istanziamo secondo necessità. Il browser mantiene questi modelli nascosti fino a quando JavaScript li attiva. Se vuoi creare più schermate per una pagina web, una soluzione sarebbe creare un file HTML per ogni schermata che vuoi visualizzare. Tuttavia, questa soluzione comporta alcune difficoltà: - Devi ricaricare l'intero HTML quando cambi schermata, il che può essere lento. - È difficile condividere dati tra le diverse schermate. Un altro approccio è avere un solo file HTML e definire più [modelli HTML](https://developer.mozilla.org/docs/Web/HTML/Element/template) usando l'elemento `