# Ehita pangarakendus osa 1: HTML mallid ja marsruudid veebirakenduses ```mermaid journey title Teie Panga Rakenduse Arenduse Teekond section SPA Põhitõed Mõista ühe lehe rakendusi: 3: Student Õpi mallide kontseptsioone: 4: Student Valda DOM-i manipuleerimist: 4: Student section Marsruutimise Süsteemid Rakenda kliendipoolset marsruutimist: 4: Student Käsitle brauseri ajalugu: 5: Student Loo navigeerimissüsteemid: 5: Student section Professionaalsed Musterid Ehita modulaarne arhitektuur: 5: Student Rakenda parimaid praktikaid: 5: Student Loo kasutajakogemusi: 5: Student ``` Kui Apollo 11 juhtimisarvuti navigeeris 1969. aastal Kuule, pidi see lülituma erinevate programmide vahel ilma kogu süsteemi taaskäivitamata. Kaasaegsed veebirakendused töötavad sarnaselt – nad muudavad nähtavat sisu ilma kõike algusest laadimata. See loob sujuva, reageerimisvõimelise kogemuse, mida kasutajad täna ootavad. Erinevalt traditsioonilistest veebisaitidest, mis laadivad iga toimingu puhul terve lehe uuesti, uuendavad kaasaegsed veebirakendused vaid vajalikke osi. See lähenemine, nagu missioonijuhtimine, mis vahetab ekraane, hoides samal ajal pidevat suhtlust, loob voolava kasutajakogemuse, mida oleme harjunud ootama. Siin on, mis muudab vahe nii märkimisväärseks: | Traditsioonilised mitmeleheküljelised rakendused | Kaasaegsed üheleheküljelised rakendused | |----------------------------|-------------------------| | **Navigatsioon** | Iga ekraani puhul kogu lehe uuesti laadimine | Kohene sisu vahetamine | | **Tõhusus** | Aeglasem, kuna laaditakse kogu HTML | Kiirem, osaliste uuendustega | | **Kasutajakogemus** | Lehe järsud välgatuse efektid | Sujuvad, rakendusetaolised üleminekud | | **Andmete jagamine** | Raskendatud lehekülgede vahel | Lihtne oleku haldus | | **Arendus** | Mitmed HTML failid haldamiseks | Üks HTML dünaamiliste mallidega | **Evolutsiooni mõistmine:** - **Traditsioonilised rakendused** nõuavad iga navigeerimise jaoks serveripäringut - **Kaasaegsed SPAd** laadivad ühe korra ja uuendavad sisu dünaamiliselt JavaScripti abil - **Kasutaja ootused** soosivad nüüd kohest ja sujuvat interaktsiooni - **Tõhususe eelised** hõlmavad vähendatud andmeedastusmahtu ja kiirust Selles õppetükis loome pangarakenduse mitme ekraaniga, mis sujuvalt üksteisega liituvad. Nagu teadlased kasutavad modulaarseid instrumente, mida saab katseteks ümber seadistada, kasutame ka HTML malle taaskasutatavate komponentidena, mida kuvatakse vastavalt vajadusele. Sa töötad HTML mallide (taaskasutatavad ekraanide plaanid), JavaScripti marsruutimise (süsteem, mis lülitab ekraanide vahel) ja brauseri ajaloo API-ga (mis hoiab nupu „tagasi“ ootuspäraselt toimimas). Need on samad põhimõtted, mida kasutavad ka React, Vue ja Angular raamistiku lahendused. Õppetüki lõpuks on sul toimiv pangarakendus, mis demonstreerib professionaalse üheleheküljelise rakenduse põhimõtteid. ```mermaid mindmap root((Ühelehele Rakendused)) Architecture Template System Client-side Routing State Management Event Handling Templates Taaskasutatavad Komponendid Dünaamiline Sisu DOM-i Manipulatsioon Sisu Vahetus Routing URL-i Halduse Ajaloo API Navigeerimisloogika Brauseri Integratsioon User Experience Kiire Navigeerimine Sujuvad Üleminekud Järjepidev Olekuhaldus Moodne Interaktsioon Performance Vähendatud Serveripäringud Kiirem Lehekülje Vahetus Tõhus Ressursside Kasutus Parem Reageerimisvõime ``` ## Eel-loengu viktoriin [Eel-loengu viktoriin](https://ff-quizzes.netlify.app/web/quiz/41) ### Mida sul vaja läheb Me vajame kohalikku veebiserverit, et testida meie pangarakendust – ära muretse, see on lihtsam kui kõlab! Kui sul veel pole paigaldatud, siis installi lihtsalt [Node.js](https://nodejs.org) ja käivita projektikaustas `npx lite-server`. See mugav käsklus käivitab kohalik serveri ja avab su rakenduse automaatselt brauseris. ### Ettevalmistus Loo oma arvutis kaust nimega `bank` ja selle sisse fail `index.html`. Alustame sellest HTML [boilerplate’st](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **See boilerplate sisaldab:** - **Määrab** HTML5 dokumendi struktuuri koos korrektse DOCTYPE deklaratsiooniga - **Seab** märgistusena UTF-8 rahvusvahelise teksti toe - **Lubab** mobiilisõbralikku disaini vaateakna meta-täpi abil - **Seadistab** kirjeldusega tiitli, mis ilmub brauseri vahekaardil - **Loodab** puhta body sektsiooni, kuhu ehitame oma rakenduse > 📁 **Projekti struktuuri eelvaade** > > **Selle õppetüki lõpuks sisaldab su projekt:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Failide ülesanded:** > - **index.html**: sisaldab kõiki malle ja määrab rakenduse struktuuri > - **app.js**: haldab marsruute, navigeerimist ja mallide juhtimist > - **Mallid**: määratlevad sisselogimise, juhtpaneeli ja teiste ekraanide kasutajaliidese --- ## HTML mallid Mallid lahendavad veebiarenduses põhiprobleemi. Kui Gutenberg leiutas 1440ndatel liikuvate trükikujutiste meetodi, mõistis ta, et terveid lehti pole vaja raiuda, vaid ta saab luua taaskasutatavad täheplokid ja korraldada neid vastavalt vajadusele. HTML mallid töötavad sama põhimõtte järgi – selle asemel, et teha iga ekraani jaoks eraldi HTML faile, defineerid taaskasutatavad struktuurid, mida saab vajadusel kuvada. ```mermaid flowchart TD A["📋 Malli määratlus"] --> B["💬 Peidetud DOM-is"] B --> C["🔍 JavaScript leiab malli"] C --> D["📋 Klooni malli sisu"] D --> E["🔗 Lisa nähtavasse DOM-i"] E --> F["👁️ Kasutaja näeb sisu"] G["Sisselogimise mall"] --> A H["Armatuurlaua mall"] --> A I["Tulevased mallid"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` Mõtle mallidele kui plaanidele sinu rakenduse erinevate osade jaoks. Nii nagu arhitekt loob ühe plaani ja kasutab seda mitmel korral, selle asemel et joonistada identsed ruumid uuesti, loome ka mallid ühekordselt ja käivitame neid vastavalt vajadusele. Brauser hoiab need mallid peidetuna kuni JavaScript nad aktiveerib. Kui tahad veebilehe jaoks luua mitu ekraani, võib üks lahendus olla igale ekraanile eraldi HTML faili tegemine. Kuid see lahendus toob kaasa mõned ebamugavused: - Ekraani vahetades tuleb kogu HTML uuesti laadida, mis võib olla aeglane. - Andmete jagamine erinevate ekraanide vahel on keeruline. Teine lähenemine on kõigi ekraanide jaoks kasutada ühte HTML faili ja defineerida mitu [HTML malli](https://developer.mozilla.org/docs/Web/HTML/Element/template) `