# Construindo um App Bancário Parte 1: Templates HTML e Rotas em um Aplicativo 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 o computador de orientação da Apollo 11 navegou até a Lua em 1969, ele precisou alternar entre diferentes programas sem reiniciar todo o sistema. Aplicativos web modernos funcionam de forma semelhante – eles mudam o que você vê sem recarregar tudo do zero. Isso cria a experiência fluida e responsiva que os usuários esperam hoje. Diferentemente dos sites tradicionais que recarregam páginas inteiras a cada interação, os aplicativos web modernos atualizam apenas as partes que precisam ser alteradas. Essa abordagem, muito parecida com a forma como o controle da missão alterna entre diferentes telas enquanto mantém a comunicação constante, cria a experiência fluida que estamos acostumados. Aqui está o que torna a diferença tão dramática: | Aplicativos Tradicionais de Múltiplas Páginas | Aplicativos Modernos de Página Única | |-----------------------------------------------|-------------------------------------| | **Navegação** | Recarregamento completo da página para cada tela | Troca instantânea de conteúdo | | **Desempenho** | Mais lento devido ao download completo de HTML | Mais rápido com atualizações parciais | | **Experiência do Usuário** | Trocas bruscas de página | Transições suaves, estilo aplicativo | | **Compartilhamento de Dados** | Difícil entre páginas | Gerenciamento de estado facilitado | | **Desenvolvimento** | Vários arquivos HTML para manter | Um único HTML com templates dinâmicos | **Entendendo a evolução:** - **Aplicativos tradicionais** exigem solicitações ao servidor para cada ação de navegação - **SPAs modernos** carregam uma vez e atualizam o conteúdo dinamicamente usando JavaScript - **Expectativas dos usuários** agora favorecem interações instantâneas e contínuas - **Benefícios de desempenho** incluem menor uso de banda e respostas mais rápidas Nesta lição, vamos construir um aplicativo bancário com várias telas que fluem perfeitamente entre si. Assim como os cientistas usam instrumentos modulares que podem ser reconfigurados para diferentes experimentos, usaremos templates HTML como componentes reutilizáveis que podem ser exibidos conforme necessário. Você trabalhará com templates HTML (modelos reutilizáveis para diferentes telas), roteamento em JavaScript (o sistema que alterna entre telas) e a API de histórico do navegador (que mantém o botão de voltar funcionando como esperado). Estas são as mesmas técnicas fundamentais usadas por frameworks como React, Vue e Angular. Ao final, você terá um aplicativo bancário funcional que demonstra os princípios profissionais de um aplicativo de página única. ```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 Pré-Aula [Quiz pré-aula](https://ff-quizzes.netlify.app/web/quiz/41) ### O que Você Vai Precisar Precisaremos de um servidor web local para testar nosso aplicativo bancário – não se preocupe, é mais fácil do que parece! Se você ainda não tiver um configurado, basta instalar [Node.js](https://nodejs.org) e executar `npx lite-server` na pasta do seu projeto. Este comando prático inicia um servidor local e abre automaticamente seu aplicativo no navegador. ### Preparação No seu computador, crie uma pasta chamada `bank` com um arquivo chamado `index.html` dentro dela. Vamos começar com este [boilerplate HTML](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **O que este boilerplate fornece:** - **Estabelece** a estrutura do documento HTML5 com a declaração DOCTYPE adequada - **Configura** a codificação de caracteres como UTF-8 para suporte a texto internacional - **Habilita** design responsivo com a tag meta viewport para compatibilidade móvel - **Define** um título descritivo que aparece na aba do navegador - **Cria** uma seção limpa no corpo onde construiremos nosso aplicativo > 📁 **Prévia da Estrutura do Projeto** > > **Ao final desta lição, seu projeto conterá:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Responsabilidades dos arquivos:** > - **index.html**: Contém todos os templates e fornece a estrutura do aplicativo > - **app.js**: Gerencia roteamento, navegação e templates > - **Templates**: Definem a interface para login, painel e outras telas --- ## Templates HTML Templates resolvem um problema fundamental no desenvolvimento web. Quando Gutenberg inventou a impressão com tipos móveis na década de 1440, ele percebeu que, em vez de esculpir páginas inteiras, poderia criar blocos de letras reutilizáveis e organizá-los conforme necessário. Templates HTML funcionam com o mesmo princípio – em vez de criar arquivos HTML separados para cada tela, você define estruturas reutilizáveis que podem ser exibidas quando necessário. ```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 ``` Pense nos templates como projetos para diferentes partes do seu aplicativo. Assim como um arquiteto cria um projeto e o utiliza várias vezes em vez de redesenhar salas idênticas, criamos templates uma vez e os instanciamos conforme necessário. O navegador mantém esses templates ocultos até que o JavaScript os ative. Se você quiser criar várias telas para uma página web, uma solução seria criar um arquivo HTML para cada tela que deseja exibir. No entanto, essa solução traz algumas inconveniências: - Você precisa recarregar todo o HTML ao alternar de tela, o que pode ser lento. - É difícil compartilhar dados entre as diferentes telas. Outra abordagem é ter apenas um arquivo HTML e definir múltiplos [templates HTML](https://developer.mozilla.org/docs/Web/HTML/Element/template) usando o elemento `