Hello World 😁 💻
No artigo de hoje iremos falar sobre o Change Detection: o mecanismo do Angular responsável por sincronizar o estado da aplicação (os dados no seu componente) com o que é exibido na tela (o DOM).
Como funciona o Change Detection
O Angular funciona em um ciclo muito simples:
Algum dado muda → o Angular percebe essa mudança → atualiza a tela.
Sempre que algo pode ter mudado (clique, requisição HTTP, timer, etc.), o Angular percorre a árvore de componentes verificando se as propriedades usadas nos templates mudaram. Se mudaram, ele atualiza o DOM automaticamente. Você não precisa manipular o DOM manualmente.
Esse processo de perceber que algum dado mudou e decidir o que precisa ser redesenhado na interface é chamado de Change Detection.
Um exemplo
Imagine este componente:
typescriptimport { Component } from '@angular/core';
@Component({
selector: 'app-change-detection',
imports: [],
templateUrl: './change-detection.html',
styleUrl: './change-detection.css',
})
export class ChangeDetection {
contador = 0;
aumentar() {
this.contador++;
}
}
Código em Typescript
E o HTML:
html<div class="container">
<p>{{ contador }}</p>
<button (click)="aumentar()">
Aumentar
</button>
</div>
Código em HTML
E no CSS para estilizar:
css.container {
font-size: 2rem;
display: flex;
flex-direction: column;
margin: auto;
margin-top: 4rem;
width: 400px;
height: 200px;
align-items: center;
background-color: #d6cd91;
border-radius: 5px;
}
button {
padding: 6px 8px;
font-size: 1rem;
border-radius: 5px;
background-color: #9c3e3e;
border: 1px solid #ccc;
color: #fff;
transition: 0.3s ease;
cursor: pointer;
}
button:hover {
background-color: #b94e4e;
}Código em CSS
Quando você clica no botão:
- Contador passa de 0 para 1;
- O Angular detecta que houve uma mudança;
- Ele atualiza o {{ contador }};
- A tela mostra 1.


Resultado do código no navegador
Você nunca precisou fazer algo como:
htmldocument.querySelector("p").innerText = contador;
O Angular fez isso automaticamente graças ao Change Detection.
Como ele sabe que algo mudou?
O Angular dispara a detecção quando acontecem eventos como:
- Clique em botão;
- Digitação em um input;
- Resposta de uma requisição HTTP;
- SetTimeout();
- Promise;
- Atualização de um Signal (Angular moderno).
Depois disso, ele verifica os componentes para descobrir quais valores mudaram e atualiza apenas o necessário. Imagine a árvore de componentes:
App ├── Header ├── Menu ├── Produtos │ ├── Produto 1 │ ├── Produto 2 │ └── Produto 3 └── Footer
Se um produto mudar de preço, o Angular faz uma verificação para descobrir quais partes precisam ser atualizadas. Dependendo da estratégia de detecção utilizada, ele pode verificar mais ou menos componentes.
Zone.js x Signals
Para o Change Detection funcionar, ele precisa responder a uma pergunta fundamental: "Como eu sei O QUE mudou e QUANDO mudou?"
É aqui que entram o Zone.js e os Signals como estratégias / ferramentas para resolver essa questão.
Zone.js (A abordagem "Alarme Geral")
O Zone.js monitora o navegador. Sempre que qualquer evento assíncrono acontece (clique, tempo esgotado, resposta de API), ele toca o alarme para o Angular: "Ei, algo assíncrono aconteceu! Execute o Change Detection!"
Como o Zone.js só sabe que algo aconteceu (mas não exatamente onde ou o quê), o mecanismo de Change Detection faz uma varredura geral verificando componente por componente.
Signals (A abordagem "GPS Direcionado")
O Signal é uma variável inteligente que sabe exatamente quem está lendo o valor dela no HTML.
Em vez de varrer a casa inteira procurando o que mudou, o Signal avisa o Change Detection com uma maior precisão: "O valor X mudou, atualize apenas aquele <span> específico no componente Y".
Exemplo ilustrativo Zone.JS x Signals
Para entender melhor a diferença do Zone.js x Signals, vamos usar a seguinte analogia:
Imagine um prédio com 100 apartamentos. O porteiro recebe uma ligação: "Acho que aconteceu alguma coisa." Então ele sai batendo de porta em porta (Zone.JS):
Apartamento 1?
Apartamento 2?
Apartamento 3?
...
Mesmo que só o apartamento 83 tivesse mudado. Agora (Signals), o sistema inteligente informa: "O apartamento 83 mudou." O porteiro vai direto lá. Não perde tempo verificando os outros 99 apartamentos.

Default vs. OnPush
Se o Change Detection é o mecanismo, e o Zone.js/Signals são as ferramentas de notificação, Default e OnPush são os modos de operação que você escolhe para ajustar como essa varredura deve se comportar.
Default
É o padrão. Sempre que acontece um evento, o Angular verifica o componente e seus filhos.
É simples e funciona muito bem na maioria dos projetos.
typescript@Component({
changeDetection: ChangeDetectionStrategy.Default
})OnPush
É uma estratégia mais otimizada. O Angular só verifica o componente quando, por exemplo:
- Um @Input() recebe uma nova referência;
- Ocorre um evento dentro do componente;
- Um Signal muda;
- Você solicita a atualização manualmente.
typescript@Component({
changeDetection: ChangeDetectionStrategy.OnPush
})
Ela pode melhorar o desempenho em aplicações grandes, mas exige entender melhor quando o Angular executa a detecção. Nas versões recentes , o Angular passou a usar bastante os Signals. Com Signals, o framework sabe exatamente qual valor mudou. Exemplo:
typescriptcontador = signal(0);
contador.update(valor => valor + 1);Quando esse signal muda, o Angular já sabe quais partes da interface dependem dele e atualiza somente essas partes, tornando a detecção mais eficiente.
E por que existe o Angular "Zoneless"?
Porque o Angular moderno percebeu que nem sempre precisava de alguém dizendo: "Confere tudo de novo!".
Com Signals, por exemplo, o próprio Angular sabe exatamente quando um dado mudou.
Em vez de:
Zone.js
↓
Change Detection
fica algo mais próximo de:
Signal mudou
↓
Angular já sabe quem depende dele
↓
Atualiza apenas o necessário
Ou seja, o Angular não precisa mais da "campainha" do Zone.js para muitos casos. O framework está caminhando para um modelo em que ele seja cada vez mais previsível, eficiente , granular e menos dependente do Zone.js.
Isso também facilita o raciocínio do desenvolvedor, porque a atualização deixa de depender de uma "mágica" baseada em eventos globais e passa a depender de dependências explícitas entre dados e interface.
O Angular está saindo de um modelo de "verificar se algo mudou" para um modelo de "eu já sei exatamente o que mudou e quem depende disso". Esse é um dos maiores avanços das versões recentes com Signals e do suporte ao modo zoneless.
Uma pequena observação técnica
Em documentações ou vídeos mais recentes, pode-se ouvir frases como "Signals eliminam a necessidade de Change Detection". Isso é uma simplificação. O que eles realmente eliminam é a necessidade do modelo amplo de verificação acionado pelo Zone.js em muitos casos.
No fim das contas, o Angular ainda precisa reconciliar o estado da aplicação com o DOM. Esse processo continua sendo, em essência, uma forma de change detection , só que muito mais precisa e eficiente.
Conclusão
O Change Detection é o motor fundamental do Angular para manter o estado da aplicação e a interface do usuário em perfeita sintonia. Embora seu objetivo principal (atualizar o DOM quando os dados mudam) permaneça o mesmo, a forma de executá-lo evoluiu significativamente: enquanto o modelo tradicional dependia do Zone.js para disparar varreduras globais, o ecossistema moderno com Signals e a estratégia OnPush, permite uma reatividade mais direcionada, otimizando a performance e reduzindo o consumo de recursos.
Compreender esse mecanismo e a separação clara entre os gatilhos de notificação e o algoritmo de verificação é essencial para construir aplicações Angular escaláveis, performáticas e de fácil manutenção.
Se você chegou até aqui, espero que tenha gostado do artigo.
Obrigada pela atenção e até breve.😁
Laryssa Ramos
