# Construir uma App Bancária Parte 1: Templates HTML e Rotas numa App Web ```mermaid journey title A Sua Jornada de Desenvolvimento de Aplicações Bancárias section Fundamentos de SPA Compreender aplicações de página única: 3: Student Aprender conceitos de templates: 4: Student Dominar manipulação do DOM: 4: Student section Sistemas de Routing Implementar routing do lado cliente: 4: Student Gerir histórico do browser: 5: Student Criar sistemas de navegação: 5: Student section Padrões Profissionais Construir arquitetura modular: 5: Student Aplicar as melhores práticas: 5: Student Criar experiências de utilizador: 5: Student ``` Quando o computador de orientação da Apollo 11 navegou até à lua em 1969, teve de mudar entre diferentes programas sem reiniciar todo o sistema. As aplicações web modernas funcionam de forma semelhante – alteram o que vê sem recarregar tudo desde o início. Isto cria a experiência fluida e responsiva que os utilizadores esperam hoje em dia. Ao contrário dos websites tradicionais que recarregam páginas inteiras a cada interação, as apps web modernas atualizam apenas as partes que precisam de mudar. Esta abordagem, tal como o centro de controlo de uma missão que alterna entre diferentes visores enquanto mantém comunicação constante, cria essa experiência fluida que procuramos. Aqui está o que torna a diferença tão dramática: | Apps Tradicionais Multi-Página | Apps Modernas de Página Única | |-------------------------------|------------------------------| | **Navegação** | Recarregamento completo da página para cada ecrã | Alteração instantânea de conteúdo | | **Performance** | Mais lento devido a downloads completos de HTML | Mais rápido com atualizações parciais | | **Experiência do Utilizador** | Piscar da página muito perceptível | Transições suaves, como de uma app | | **Partilha de Dados** | Difícil entre páginas | Gestão de estado facilitada | | **Desenvolvimento** | Múltiplos ficheiros HTML para manter | Um único HTML com templates dinâmicos | **Compreendendo a evolução:** - **Apps tradicionais** requerem pedidos ao servidor para cada ação de navegação - **SPAs modernas** carregam uma vez e atualizam o conteúdo dinamicamente com JavaScript - **As expectativas dos utilizadores** agora favorecem interações instantâneas e sem falhas - **Benefícios de performance** incluem menor largura de banda e respostas mais rápidas Nesta lição, vamos construir uma app bancária com múltiplos ecrãs que fluem entre si sem interrupções. Tal como cientistas que usam instrumentos modulares que podem ser reconfigurados para diferentes experiências, vamos usar templates HTML como componentes reutilizáveis que podem ser exibidos conforme necessário. Irá trabalhar com templates HTML (esquemas reutilizáveis para diferentes ecrãs), roteamento JavaScript (o sistema que alterna entre ecrãs) e a API de histórico do navegador (que mantém o botão de voltar a funcionar como esperado). Estas são as mesmas técnicas fundamentais usadas por frameworks como React, Vue e Angular. No final, terá uma app bancária funcional que demonstra princípios profissionais de aplicações de página única. ```mermaid mindmap root((Aplicações de Página Única)) Architecture Template System Client-side Routing State Management Event Handling Templates Componentes Reutilizáveis Conteúdo Dinâmico Manipulação do DOM Alternância de Conteúdo Routing Gestão de URLs API de Histórico Lógica de Navegação Integração com o Navegador User Experience Navegação Rápida Transições Suaves Estado Consistente Interações Modernas Performance Redução de Pedidos ao Servidor Transições de Página Mais Rápidas Utilização Eficiente de Recursos Melhor Responsividade ``` ## Questionário Pré-Lição [Questionário pré-lição](https://ff-quizzes.netlify.app/web/quiz/41) ### O Que Vai Precisar Vamos precisar de um servidor web local para testar a nossa app bancária – não se preocupe, é mais fácil do que parece! Se ainda não tiver um configurado, basta instalar o [Node.js](https://nodejs.org) e correr `npx lite-server` a partir da pasta do seu projeto. Este comando prático inicia um servidor local e abre automaticamente a sua app no navegador. ### Preparação No seu computador, crie uma pasta chamada `bank` com um ficheiro chamado `index.html` dentro dela. Vamos começar a partir deste [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code) HTML: ```html Bank App ``` **Isto é o que este boilerplate fornece:** - **Estabelece** a estrutura do documento HTML5 com a declaração correta de DOCTYPE - **Configura** a codificação de caracteres para UTF-8 para suporte internacional de texto - **Permite** design responsivo com a meta tag viewport para compatibilidade móvel - **Define** um título descritivo que aparece no separador do navegador - **Cria** uma secção body limpa onde construiremos a nossa aplicação > 📁 **Pré-visualização da Estrutura do Projeto** > > **No final desta lição, o seu projeto conterá:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Responsabilidades dos ficheiros:** > - **index.html**: Contém todos os templates e fornece a estrutura da app > - **app.js**: Trata o roteamento, navegação e gestão de templates > - **Templates**: Definem a interface para login, dashboard e outros ecrãs --- ## Templates HTML Os templates resolvem um problema fundamental no desenvolvimento web. Quando Gutenberg inventou a impressão com tipos móveis na década de 1440, percebeu que em vez de esculpir páginas inteiras, podia criar blocos de letras reutilizáveis e arranjá-los conforme necessário. Os templates HTML funcionam pelo mesmo princípio – em vez de criar ficheiros HTML separados para cada ecrã, define estruturas reutilizáveis que podem ser exibidas quando for preciso. ```mermaid flowchart TD A["📋 Definição do Template"] --> B["💬 Oculto no DOM"] B --> C["🔍 JavaScript Encontra Template"] C --> D["📋 Clonar Conteúdo do Template"] D --> E["🔗 Anexar ao DOM Visível"] E --> F["👁️ Utilizador Vê Conteúdo"] G["Template de Login"] --> A H["Template do Painel"] --> A I["Templates Futuros"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` Pense nos templates como esquemas para diferentes partes da sua app. Tal como um arquiteto cria um esquema e usa-o várias vezes em vez de redesenhar quartos idênticos, criamos templates uma vez e instanciamos quando necessário. O navegador mantém estes templates ocultos até serem ativados pelo JavaScript. Se quiser criar múltiplos ecrãs para uma página web, uma solução seria criar um ficheiro HTML para cada ecrã que deseja mostrar. No entanto, esta solução traz alguns inconvenientes: - Precisa de recarregar todo o HTML ao mudar de ecrã, o que pode ser lento. - É difícil partilhar dados entre os diferentes ecrãs. Outra abordagem é ter apenas um ficheiro HTML, e definir múltiplos [templates HTML](https://developer.mozilla.org/docs/Web/HTML/Element/template) usando o elemento `