# Rakenna pankkisovellus Osa 1: HTML-mallit ja reitit verkkosovelluksessa ```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 ``` Kun Apollo 11:n ohjaustietokone navigoi kuuhun vuonna 1969, sen täytyi vaihtaa ohjelmien välillä ilman, että koko järjestelmä käynnistettiin uudelleen. Modernit verkkosovellukset toimivat samalla tavalla – ne muuttavat näkymää lataamatta kaikkea alusta asti. Tämä luo sujuvan ja responsiivisen käyttökokemuksen, jota käyttäjät odottavat nykyään. Toisin kuin perinteiset verkkosivustot, jotka lataavat kokonaisia sivuja jokaisen vuorovaikutuksen yhteydessä, modernit verkkosovellukset päivittävät vain ne osat, jotka tarvitsevat muutosta. Tämä lähestymistapa, aivan kuten ohjauskeskus vaihtaa näyttöjen välillä säilyttäen jatkuvan yhteyden, luo sen sulavan kokemuksen, johon olemme tottuneet. Tässä on syy, miksi ero on niin merkittävä: | Perinteiset monisivuiset sovellukset | Modernit yksisivuiset sovellukset | |-------------------------------------|----------------------------------| | **Navigointi** | Koko sivun lataus jokaiselle näytölle | Välitön sisällön vaihto | | **Suorituskyky** | Hitaampi, koska HTML ladataan kokonaan | Nopeampi osittaisilla päivityksillä | | **Käyttökokemus** | Häiritsevät sivun välähdykset | Sulavat, sovellusmaiset siirtymät | | **Tietojen jakaminen** | Vaikeaa sivujen välillä | Helppo tilanhallinta | | **Kehitys** | Useita HTML-tiedostoja ylläpidettäväksi | Yksi HTML dynaamisilla malleilla | **Evoluution ymmärtäminen:** - **Perinteiset sovellukset** vaativat palvelinpyyntöjä jokaiselle navigointitoiminnolle - **Modernit yksisivuiset sovellukset (SPA)** latautuvat kerran ja päivittävät sisältöä dynaamisesti JavaScriptin avulla - **Käyttäjien odotukset** suosivat välittömiä, saumattomia vuorovaikutuksia - **Suorituskykyedut** sisältävät pienemmän kaistanleveyden käytön ja nopeammat vastaukset Tässä oppitunnissa rakennamme pankkisovelluksen, jossa on useita näyttöjä, jotka sulautuvat yhteen saumattomasti. Kuten tiedemiehet käyttävät modulaarisia instrumentteja, joita voidaan muokata eri kokeisiin, käytämme HTML-malleja uudelleenkäytettävinä komponentteina, jotka voidaan näyttää tarpeen mukaan. Työskentelet HTML-mallien (uudelleenkäytettävät suunnitelmat eri näytöille), JavaScript-reitityksen (järjestelmä, joka vaihtaa näyttöjen välillä) ja selaimen historia-API:n (joka pitää takaisin-painikkeen toiminnassa) kanssa. Nämä ovat samoja perusmenetelmiä, joita käytetään kehyksissä kuten React, Vue ja Angular. Lopuksi sinulla on toimiva pankkisovellus, joka esittelee ammattimaisia yksisivuisen sovelluksen periaatteita. ```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 ``` ## Ennakkokysely [Ennakkokysely](https://ff-quizzes.netlify.app/web/quiz/41) ### Mitä tarvitset Tarvitsemme paikallisen verkkopalvelimen testataksemme pankkisovellustamme – älä huoli, se on helpompaa kuin miltä kuulostaa! Jos sinulla ei ole sellaista jo asennettuna, asenna vain [Node.js](https://nodejs.org) ja suorita `npx lite-server` projektikansiostasi. Tämä kätevä komento käynnistää paikallisen palvelimen ja avaa sovelluksesi automaattisesti selaimessa. ### Valmistelu Luo tietokoneellesi kansio nimeltä `bank` ja sen sisälle tiedosto nimeltä `index.html`. Aloitamme tästä HTML [pohjakoodista](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Tämä pohjakoodi tarjoaa:** - **Määrittää** HTML5-dokumentin rakenteen oikealla DOCTYPE-ilmoituksella - **Konfiguroi** merkistökoodauksen UTF-8:ksi kansainvälisen tekstituen vuoksi - **Mahdollistaa** responsiivisen suunnittelun viewport-meta-tagin avulla mobiiliyhteensopivuuden vuoksi - **Asettaa** kuvailevan otsikon, joka näkyy selaimen välilehdessä - **Luo** siistin runko-osan, jossa rakennamme sovelluksemme > 📁 **Projektirakenteen esikatselu** > > **Oppitunnin lopussa projektisi sisältää:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Tiedostojen vastuut:** > - **index.html**: Sisältää kaikki mallit ja tarjoaa sovelluksen rakenteen > - **app.js**: Käsittelee reititystä, navigointia ja mallien hallintaa > - **Mallit**: Määrittelee käyttöliittymän kirjautumiselle, hallintapaneelille ja muille näytöille --- ## HTML-mallit Mallit ratkaisevat perustavanlaatuisen ongelman verkkokehityksessä. Kun Gutenberg keksi irtokirjasinpainamisen 1440-luvulla, hän ymmärsi, että sen sijaan, että kaivertaisi kokonaisia sivuja, hän voisi luoda uudelleenkäytettäviä kirjaimia ja järjestää ne tarpeen mukaan. HTML-mallit toimivat samalla periaatteella – sen sijaan, että luot erillisiä HTML-tiedostoja jokaiselle näytölle, määrittelet uudelleenkäytettäviä rakenteita, jotka voidaan näyttää tarvittaessa. ```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 ``` Ajattele malleja suunnitelmina sovelluksesi eri osille. Aivan kuten arkkitehti luo yhden suunnitelman ja käyttää sitä useita kertoja sen sijaan, että piirtäisi identtisiä huoneita uudelleen, me luomme mallit kerran ja otamme ne käyttöön tarpeen mukaan. Selain pitää nämä mallit piilossa, kunnes JavaScript aktivoi ne. Jos haluat luoda useita näyttöjä verkkosivulle, yksi ratkaisu olisi luoda yksi HTML-tiedosto jokaista näytettävää näyttöä varten. Tämä ratkaisu tuo kuitenkin mukanaan joitakin hankaluuksia: - Koko HTML täytyy ladata uudelleen näytön vaihdon yhteydessä, mikä voi olla hidasta. - Tietojen jakaminen eri näyttöjen välillä on vaikeaa. Toinen lähestymistapa on käyttää vain yhtä HTML-tiedostoa ja määritellä useita [HTML-malleja](https://developer.mozilla.org/docs/Web/HTML/Element/template) `