# Створення банківського додатку, частина 1: HTML-шаблони та маршрути у веб-додатку ```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 ``` Коли комп'ютер Apollo 11 у 1969 році керував польотом на Місяць, він мав перемикатися між різними програмами без перезапуску всієї системи. Сучасні веб-додатки працюють схожим чином – вони змінюють те, що ви бачите, без перезавантаження всього з нуля. Це створює плавний, чутливий досвід, якого очікують користувачі сьогодні. На відміну від традиційних веб-сайтів, які перезавантажують цілі сторінки для кожної взаємодії, сучасні веб-додатки оновлюють лише ті частини, які потребують змін. Цей підхід, як і перемикання дисплеїв у центрі управління польотами, забезпечує той плавний досвід, до якого ми звикли. Ось що робить різницю такою значною: | Традиційні багатосторінкові додатки | Сучасні односторінкові додатки | |------------------------------------|-------------------------------| | **Навігація** | Повне перезавантаження сторінки для кожного екрану | Миттєве перемикання контенту | | **Продуктивність** | Повільніше через завантаження всього HTML | Швидше завдяки частковим оновленням | | **Досвід користувача** | Різкі спалахи сторінок | Плавні, схожі на додатки переходи | | **Обмін даними** | Складно між сторінками | Легке управління станом | | **Розробка** | Підтримка кількох HTML-файлів | Один HTML із динамічними шаблонами | **Розуміння еволюції:** - **Традиційні додатки** потребують серверних запитів для кожної навігаційної дії - **Сучасні SPA** завантажуються один раз і динамічно оновлюють контент за допомогою JavaScript - **Очікування користувачів** тепер спрямовані на миттєві, безперервні взаємодії - **Переваги продуктивності** включають зменшення використання пропускної здатності та швидші відповіді У цьому уроці ми створимо банківський додаток із кількома екранами, які плавно переходять один в одного. Як і вчені використовують модульні інструменти, які можна налаштувати для різних експериментів, ми будемо використовувати HTML-шаблони як багаторазові компоненти, які можна відображати за потреби. Ви будете працювати з HTML-шаблонами (багаторазовими кресленнями для різних екранів), маршрутизацією JavaScript (системою, яка перемикає екрани) та API історії браузера (який забезпечує роботу кнопки "Назад" як очікується). Це ті самі фундаментальні техніки, які використовуються у фреймворках, таких як React, Vue та Angular. Наприкінці ви матимете робочий банківський додаток, який демонструє професійні принципи односторінкових додатків. ```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 ``` ## Попереднє опитування [Попереднє опитування](https://ff-quizzes.netlify.app/web/quiz/41) ### Що вам знадобиться Нам потрібен локальний веб-сервер для тестування нашого банківського додатку – не хвилюйтеся, це простіше, ніж здається! Якщо у вас його ще немає, просто встановіть [Node.js](https://nodejs.org) і запустіть `npx lite-server` з вашої папки проекту. Ця зручна команда запускає локальний сервер і автоматично відкриває ваш додаток у браузері. ### Підготовка На вашому комп'ютері створіть папку з назвою `bank` і файл `index.html` всередині неї. Ми почнемо з цього HTML [шаблону](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Ось що забезпечує цей шаблон:** - **Встановлює** структуру документа HTML5 з правильним оголошенням DOCTYPE - **Налаштовує** кодування символів як UTF-8 для підтримки міжнародного тексту - **Дозволяє** адаптивний дизайн за допомогою мета-тега viewport для сумісності з мобільними пристроями - **Встановлює** описовий заголовок, який з'являється на вкладці браузера - **Створює** чистий розділ body, де ми будемо будувати наш додаток > 📁 **Попередній перегляд структури проекту** > > **Наприкінці цього уроку ваш проект буде містити:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Призначення файлів:** > - **index.html**: Містить усі шаблони та забезпечує структуру додатку > - **app.js**: Обробляє маршрутизацію, навігацію та управління шаблонами > - **Шаблони**: Визначають інтерфейс для входу, панелі управління та інших екранів --- ## HTML-шаблони Шаблони вирішують фундаментальну проблему у веб-розробці. Коли Гутенберг винайшов друкарський верстат у 1440-х роках, він зрозумів, що замість того, щоб вирізати цілі сторінки, він може створити багаторазові блоки літер і розташовувати їх за потреби. HTML-шаблони працюють за тим самим принципом – замість створення окремих HTML-файлів для кожного екрану, ви визначаєте багаторазові структури, які можна відображати за потреби. ```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 ``` Уявіть шаблони як креслення для різних частин вашого додатку. Як архітектор створює одне креслення і використовує його кілька разів, а не перемальовує однакові кімнати, ми створюємо шаблони один раз і використовуємо їх за потреби. Браузер тримає ці шаблони прихованими, поки JavaScript не активує їх. Якщо ви хочете створити кілька екранів для веб-сторінки, одним із рішень буде створення одного HTML-файлу для кожного екрану, який ви хочете відобразити. Однак це рішення має певні незручності: - Ви повинні перезавантажувати весь HTML при перемиканні екрану, що може бути повільним. - Складно ділитися даними між різними екранами. Інший підхід – мати лише один HTML-файл і визначити кілька [HTML-шаблонів](https://developer.mozilla.org/docs/Web/HTML/Element/template) за допомогою елемента `