Angular: recuperando os dados de uma página após um recarregamento
Ao recarregar a página, o contexto de execução do JavaScript é recriado, e variáveis em memória são perdidas. Para preservar dados, como os de um formulário, podemos usar o localStorage, que mantém as informações mesmo após o recarregamento. Veja neste texto um exemplo prático sobre esse assunto.
Ao desenvolver aplicações Angular, é comum precisar preservar o estado da página após um refresh, garantindo que os dados que o usuário forneceu sejam mantidos, como em um formulário. Isso pode ser feito de algumas formas, dentre elas, salvar os dados no localStorage do navegador.
Introdução sobre o ciclo de vida do JavaScript
Quando acessamos uma página no navegador, diversos elementos são carregados, como o conteúdo HTML, arquivos CSS, scripts JavaScript, imagens, fontes, entre outros. Após o navegador interpretar os scripts, é criado um contexto de execução. Esse contexto representa o ambiente onde o JavaScript da página opera, permitindo a manipulação de elementos da DOM, execução de lógica de negócios e interação com APIs externas.
Por exemplo, o contexto de execução pode corresponder a um projeto Angular em funcionamento ou até mesmo a uma página estática, como esta que você está lendo agora. No entanto, ao pressionar F5 ou clicar no botão de atualizar do seu navegador, o contexto de execução atual é descartado, e um novo é criado. Isso significa que todas as variáveis, classes, instâncias de objetos e outros dados mantidos em memória pelo JavaScript são perdidos e reiniciados.
De forma prática, imagine que você preenche um formulário em uma página e, por algum motivo, decide recarregar essa página. Após o refresh, os dados do formulário não estarão mais presentes, porque o contexto anterior foi substituído. Esse comportamento é padrão no ciclo de vida do JavaScript em uma página web, ou seja, sempre que uma página é recarregada, é como se você formatasse seu computador e recomeçasse do zero.
É exatamente nesse ponto que surge a necessidade de salvar o estado da página. Preservar o estado ajuda a melhorar a experiência do usuário, evitando que informações sejam perdidas e permitindo que a interação continue de forma contínua, mesmo após um recarregamento. Técnicas como o uso de localStorage
, sessionStorage
, query params, cookies ou persistência de dados no servidor são algumas das abordagens mais comuns para solucionar esse problema.
Neste pequeno texto será apresentado o uso do localStorage
para gravar e resgatar valores, preservando assim o estado de um formulário.
Gravando e resgatando o estado da página de um projeto Angular
O código abaixo foi desenvolvido utilizando Angular 19, mas a ideia e boa parte do código funcionará com versões mais antigas do framework.
A classe EstadoService
fornece métodos bem diretos para salvar qualquer valor no localStorage
. O motivo da escolha do localStorage
, é porque ao contrário do sessionStorage
, ele mantém os dados armazenados mesmo após o fechamento da aba ou do navegador. Também poderíamos salvar os valores nos cookies, contudo, os cookies são trafegados em todas as requisições ao backend, aumentando assim o tamanho do cabeçalho de requisição.
Já no componente que contém o formulário, a lógica é bem simples. Deixei alguns comentários para facilitar o entendimento:
Observe no resultado abaixo que após preencher o formulário e efetuar um "reload", os valores do formulário são mantidos:
É possível visualizar os dados salvos no localStorage
através do DevTools do navegador:
Considerações
Mesmo sendo um projeto simples, envolve o entendimento sobre o que acontece no navegador ao requisitar uma página HTML, sobretudo de quando o JavaScript é interpretado e executado, que é um conceito fundamental em projetos Angular. Vale mencionar que o entendimento dos mecanismos de storage do navegador são importantes e já foram alvo de estudo por aqui, deixo o link a seguir:
Para finalizar, a ideia pode ser expandida e modificada, tudo dependerá dos requisitos do seu projeto.