A GERAÇÃO DO FUTURO

É A QUE APRENDE HOJE.

00HORAS
:
00MIN
:
00SEG
Comece sua evolução
Comece sua evolução
  • Home

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Carreiras Alura

    Evolua com profundidade técnica, direção clara e aplicação prática.

    Jornadas guiadas do básico ao avançado com checkpoints práticos, desenhadas para quem busca profundidade e protagonismo técnico.

    Iniciante

    Comece do zero com uma trilha clara e progressiva.

    Fundamentos práticos para dar os primeiros passos com segurança e construir uma base sólida.

    Intermediário

    Continue sua evolução com cursos que conectam fundamentos, ferramentas e prática profissional. Ganhe autonomia, e avance para projetos mais completos.

    Avançado

    Aprofunde temas técnicos e estratégicos para enfrentar desafios mais complexos. Explore boas práticas, arquitetura, performance com visão profissional.

    CURSOS

    Ver mais cursos de Back-end
    • Pensamento computacional: fundamentos da computação e lógica de programação
    • Lógica de programação: mergulhe em programação com JavaScript
    • DDD: fundamentos do design orientado a domínio
    • ASP.NET: autenticação e autorização em APIs e aplicações web
    • Microsserviços: migração de monólitos e modularização

    CURSOS

    Ver mais cursos de Dados
    • Python para Dados: primeiros passos
    • Excel: domine o editor de planilhas
    • Engenharia de Dados: Orquestração de Pipelines com Apache Airflow
    • Power BI Desktop: construindo meu primeiro dashboard
    • Governança e Arquitetura de Dados

    CURSOS

    Ver mais cursos de Inteligência Artificial
    • IA: Explorando o Potencial da Inteligência Artificial Generativa
    • Engenharia de Prompt: Criando Prompts Eficazes para IA Generativa
    • Claude para Análise de Dados: prompts, integrações e automações
    • Agno: criando agentes e sistemas multiagente
    • Engenharia de software na era da IA: segurança de aplicações com agentes, MCPs e código gerado por IA

    CURSOS

    Ver mais cursos de Front-end
    • HTML e CSS: ambiente, estrutura e estilo
    • React: realizando testes avançados com Jest e Testing Library
    • React: integrando TypeScript em projetos
    • JavaScript: aprendendo a programar
    • React: aplicando arquiteturas de Micro frontends

    CURSOS

    Ver mais cursos de DevOps
    • Sistema Operacional Linux: fundamentos e administração prática
    • Containers e Docker: empacotamento, isolamento e gestão
    • Redes: dos conceitos iniciais à criação de uma intranet
    • Linux: gerenciando diretórios, arquivos, permissões e processos
    • Cibersegurança: Fundamentos e práticas integradas

    CURSOS

    Ver mais cursos de UX & Design
    • UX Research: mapeando a experiência da pessoa usuária
    • UX/UI Design: Entregando produtos digitais com IA
    • UI Design: Prototipação e animações interativas
    • Figma: Conhecendo o programa
    • Product Design: métricas e ciclo de vida do produto

    CURSOS

    Ver mais cursos de Inovação e Gestão
    • Canva: Criação de landing pages e e-mail marketing
    • Agilidade: como ela pode ajudar a criar um time de alta performance
    • Google Analytics 4: Extrair insights e configurar eventos
    • Management 3.0: gerencie o ambiente, não as pessoas
    • Automação de processos com n8n: Inteligência de dados para Marketing

    CURSOS

    Ver mais cursos de Mobile
    • React Native: Estilização e Layouts com Flexbox e StyleSheet
    • Flutter: Graphql e suporte offline
    • Android com Gemini: Trabalhando com textos e imagens na IA
    • Dart: trabalhando com orientação a objetos
    • React Native: Dominando Listas com FlatList e ScrollView

    CARREIRAS

    Ver mais carreiras
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA

    CURSOS

    • Engenharia de Prompt: Prompts Eficazes para IA Generativa
    • Claude Code: Criando sua Primeira Aplicação
    • Python: Crie sua Primeira Aplicação
    • Git e GitHub: Compartilhando e Colaborando
    • N8N: Fluxos de Trabalho Avançados

    CURSOS

    • Copilot Studio: Solução Multiagentes
    • Padrões de API HTTP e Modelagem de APIs
    • Python para Análise de Dados com SQL
    • Docker: Criando e Gerenciando Containers
    • Design com IA: Otimizando o Processo Criativo

    CURSOS

    • Model Context Protocol (MCP)
    • Spec-Driven Development: Dev Assistido por Agentes
    • Arquitetura de Sistemas Distribuídos com Java
    • Governança de Modelos e Reprodutibilidade
    • Pentest: Vulnerabilidades em Aplicações Web

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Skills & Go

    O Skills & Go é para Tech Leads, Product Managers, estrategistas e early adopters que transformam ideias em soluções de alto impacto. Em cursos ao vivo e 100% online, você domina a nova era da IA em tempo real.

    Aulas ao vivo

    Saiba mais
    • Agentic Engineering: orquestre multiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Eventos Alura

    Nossos eventos são pensados para quem quer estar à frente das mudanças em tecnologia, IA e inovação. Em experiências presenciais, você acompanha tendências e se conecta com especialistas que estão moldando o futuro.

    Próximos eventos

    • IA Conference
    • Alura Signals
  • Talent Lab
  • IA
  • Artigos
  • Para Empresas
Ver planos
Links principais
  • Planos e Promoções
  • Carreiras

    Ver todas
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA
    Entrar Ver Planos
  • Área de Interesse

    Entrar Ver Planos
  • Aulas ao Vivo - Skills & Go

    • Agentic Engineering: orquestre multiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA
    Entrar Ver Planos
  • Senioridade

    Entrar Ver Planos
  • Eventos Alura

    • IA Conference
    • Alura Signals
    Entrar Ver Planos
  • Links complementares do menu mobile
  • Talent lab
  • Inteligência Artificial
  • Pós Graduações
  • Artigos
  • Para Empresas
  • Sobre a Alura
  • Grupo Alun
  • Entrar
    • Home
    • Carreiras
    • Skills & Go
    • Talent Lab
    • Inteligência Artificial
    • Pós Graduações
    • Artigos
    • Sobre a Alura
    • Grupo Alun
    LoginContato
    • Plano Pro 24
    • Plano Plus 24
    • Plano Ultra Lab 24
    • LinkedIn
    • Instagram
    • YouTube
    1. Página inicial
    2. Front-end
    3. Entendendo os Signals do Angular

    Entendendo os Signals do Angular

    7 min7 minutos de leitura

    7 min7 minutos de leitura

    Publicado: 28/11/2023

    Última atualização: 20 de Março

    1. Angular Signals! O que são, afinal?
    2. Mas o que significa 'notificar quaisquer dependentes'?
    3. effect
    4. computed

    Olá, pessoa!

    Antes de começarmos com Angular Signals, você já se perguntou como as alterações feitas no seu estado se refletem na view?

    Quando o seu estado muda, o Angular automaticamente aplica essas mudanças na view correspondente. Isso possibilita uma interação fluida e sincronizada entre model e view, proporcionando uma experiência suave pro usuário.

    Mas acredita em mim, isso não é mágica!

    A chave para essa sincronização é a detecção de mudanças e o Zone.js. Embora isso não seja o foco deste artigo, precisamos entender como o Angular lida com isso, assim o objetivo dos Signals vai ficar ainda mais claro no fim.

    Aplicações Angular são construídas usando uma arquitetura baseada em componentes, onde cada componente representa uma funcionalidade específica. Nossa app, no fim das contas, é uma árvore de componentes.

    Diagrama de hierarquia em fundo azul escuro com elementos em azul claro e texto em branco. No topo, há uma ilustração de um avatar com fones e sinal de Wi-Fi, ao lado do texto 'Zone js'. Abaixo, um retângulo maior rotulado 'Raiz' está conectado a três componentes. 'Componente 1' se ramifica para 'Comp.1-1' e 'Comp.1-2'. 'Componente 2' se ramifica para 'Comp.2-1', 'Comp.2-2' e 'Comp.2-3'. 'Componente 3' se divide em 'Comp.3-1', que por sua vez se ramifica em 'Comp.3-1-1', 'Comp.3-1-2' e 'Comp.3-1-3'. No canto inferior direito, a palavra 'alura' aparece em branco.

    Usando "zonas" e executando código dentro delas, o framework consegue perceber melhor as operações realizadas. Isso permite que ele trate os erros de forma mais eficaz e, o mais importante, dispare a detecção de mudanças sempre que algo acontece na aplicação (model muda, view atualiza). Então, podemos dizer que:

    Diagrama de hierarquia com design de interface futurista em fundo azul escuro e elementos em azul claro. No canto superior esquerdo, uma ilustração de um avatar com fones e sinal de Wi-Fi ao lado do texto 'Zone js'. Ao lado do avatar, uma caixa de diálogo com o texto 'Ei! Algo aconteceu, rode Detecção de Mudança'. Abaixo, um retângulo maior intitulado 'Raiz' está no topo, ligado a três componentes. 'Componente 1' está ligado a 'Comp.1-1' e 'Comp.1-2'. 'Componente 2' leva a 'Comp.2-1', 'Comp.2-2' e 'Comp.2-3'. 'Componente 3' conduz a 'Comp.3-1', que por sua vez se divide em 'Comp.3-1-1', 'Comp.3-1-2' e 'Comp.3-1-3'. À esquerda, uma linha leva de 'Componente 1' a uma caixa rotulada 'Evento'. No canto inferior direito, a palavra 'alura' em branco.

    • O Zone.js está sempre atento e detecta quando algo acontece na aplicação;
    • Quando alguma coisa acontece, o Zone.js dispara a detecção de mudanças para atualizar o estado da aplicação.
    Diagrama de hierarquia interativa em fundo azul escuro com elementos em rosa e ícones azuis. No topo esquerdo, há uma ilustração de um avatar com fones e sinal de Wi-Fi junto ao texto 'Zone js'. Uma caixa de diálogo ao lado do avatar diz 'Ei! Algo aconteceu, rode Detecção de Mudança'. O elemento central 'Raiz' está conectado a três caixas: 'Componente 1', 'Componente 2' e 'Componente 3', todas com a sigla 'DM*' e um ícone de engrenagem azul indicando 'Detecção de mudança'. 'Componente 1' leva a 'Comp.1-1' e 'Comp.1-2'; 'Componente 2' a 'Comp.2-1', 'Comp.2-2' e 'Comp.2-3'; e 'Componente 3' a 'Comp.3-1', que se subdivide em 'Comp.3-1-1', 'Comp.3-1-2' e 'Comp.3-1-3', todos marcados com 'DM*'. À esquerda, uma linha conecta 'Componente 1' a uma caixa rotulada 'Evento'. No canto inferior direito está o logotipo 'alura'. No canto inferior esquerdo, uma legenda explica 'DM* = Detecção de mudança' com o ícone de engrenagem correspondente.

    Quando a detecção de mudanças começa, o framework percorre todos os componentes na árvore para verificar se o estado deles mudou ou não e se o novo estado afeta a visualização. Se for o caso, a parte do DOM do componente que foi afetada pela mudança é atualizada.

    Essa funcionalidade pode ter um impacto significativo no desempenho da aplicação, realizando trabalhos que podem não ser necessários, já que a maioria dos componentes pode não ser afetada pelo evento e ela sempre percorre toda a árvore.

    Você deve estar se perguntando: "Mas Vinny, por que você está explicando isso? Este artigo não é sobre Angular Signals?"

    O ponto é que os Signals podem nos ajudar a evitar essas verificações desnecessárias e atualizar apenas a parte da aplicação que mudou. E isso é muito importante. Muito mesmo.

    Bom, agora que vimos como o Zone.JS trabalha, podemos seguir em frente e aprender sobre Angular Signals. Vamos lá, é hora de mergulhar nesse universo empolgante e descobrir como ele pode tornar nossas aplicações mais eficientes e reativas!

    Angular Signals! O que são, afinal?

    Os Signals são valores reativos, que tecnicamente são funções sem argumentos [(() => T)], que, ao serem executadas, retornam um valor. Podemos dizer que um Signal é um tipo especial de valor que pode ser observado para mudanças.

    Como criamos um Signal? É simples: criamos e iniciamos um Signal chamando a função signal().

    A função signal() recebe dois argumentos:

    • initialValue: Representa o valor inicial do Signal, podendo ser de qualquer tipo T.
    • options: É um objeto do tipo CreateSignalOptions, que inclui um método equal para comparar dois valores do tipo T. Se o objeto options não for fornecido, a função defaultEquals será usada. Esta função compara dois valores do mesmo tipo T, usando uma combinação dos operadores === e Object.is.

    A função signal retorna um WritableSignal<T>. Um Signal é uma função getter, mas o tipo WritableSignal nos dá a possibilidade de modificar o valor por três métodos:

    • set [set(value: T): void] para substituição (define o novo valor e notifica as dependências):
    jogos.set(['Baldur's Gate III'])
    
    • update [update(updateFn: (value: T) => T)] para derivar um novo valor (atualiza o valor do Signal, com base em seu valor atual e notifica as dependências). A operação de atualização usa a operação set() para realizar atualizações por debaixo dos panos:
    nivelPersonagem.update(nivel => nivel + 1)
    

    Então, um Signal é um valor reativo que pode ser observado, atualizado e notificar quaisquer dependentes.

    Banner da Alura convidando profissionais a desenvolver habilidades em inteligência artificial para acompanhar as transformações do mercado de tecnologia. A campanha destaca que quem utiliza IA produz mais, cresce na carreira e se torna mais competitivo, reforçando que a inteligência artificial deixou de ser tendência e passou a ser uma habilidade essencial. O banner incentiva a começar a aprender IA com os cursos da Alura e impulsionar a transformação digital.

    Mas o que significa 'notificar quaisquer dependentes'?

    Aqui entra a parte fascinante do Signal. Vamos explorar o que são os dependentes para os Signals e como notificá-los.

    Signal não é apenas um valor que pode ser modificado, é algo mais. Signal é um valor reativo e atua como um produtor que notifica os consumidores (dependentes) quando muda.

    Então, os dependentes no Signal são qualquer código que registrou interesse no valor do Signal e deseja ser notificado sempre que o valor do Signal mudar.

    Quando o valor do Signal é modificado, ele notifica todos os seus dependentes, permitindo que reajam à mudança no valor do Signal. Isso torna o Signal um elemento central de uma aplicação reativa, pois permite que diferentes partes da aplicação atualizem automaticamente em resposta às mudanças nos dados.

    Diagrama explicativo sobre o fluxo de notificações de mudança em fundo azul escuro. No topo, um bloco azul claro rotulado 'Signal' está ligado a três blocos mais abaixo, intitulados 'Consumidor1', 'Consumidor2' e 'Consumidor3'. Ao lado do 'Signal', uma anotação diz 'Altera valor por: - set - update'. Abaixo dos consumidores, uma frase em branco afirma: 'Quando uma mudança acontece por (set/update), um signal notifica seus consumidores'. Uma linha tracejada separa esta seção de outra abaixo, que mostra outro bloco 'Signal' com a anotação 'Valor mudou', ligado a 'Consumidor1', 'Consumidor2' e 'Consumidor3', com setas rotuladas 'notifica'. No canto inferior direito está o logotipo 'alura' em branco.

    E como podemos adicionar dependentes (consumidores) ao Signal?

    Podemos adicionar consumidores usando as funções effect e computed.

    effect

    Às vezes, quando um signal recebe um novo valor, podemos precisar adicionar um efeito colateral. Para isso, usamos a função effect().

    O effect agenda e executa uma função com efeitos colaterais dentro de um contexto reativo.

    Como usar o effect

    A função dentro do effect será reavaliada com qualquer mudança que ocorra nos signals chamados dentro dela. Múltiplos signals podem ser adicionados à função effect.

    effect(() => {
      console.log(`Temos um total de: ${jogos().length} jogos cadastrados.`);
    });
    

    Vamos explorar o funcionamento por trás da função effect:

    Quando declaramos uma função effect, a função(effectFn) passada como argumento será adicionada à lista de consumidores de quaisquer signals usados, como jogos em nosso exemplo. (Signals usados pela effectFn serão os produtores).

    Então, quando o signal recebe um novo valor usando os operadores set ou update a effectFn será reavaliada com o novo valor do signal (o produtor notifica todos os consumidores dos novos valores).

    A função effect retorna um EffectRef, que é um efeito reativo global que pode ser destruído manualmente. Um EffectRef tem uma operação de destruição.

    destroy(): Encerra o efeito, removendo-o de quaisquer execuções programadas futuras.

    computed

    E se houver outro valor que dependa dos valores de outros signals e precise ser recalculado sempre que alguma dessas dependências mudar?

    Nesse caso, podemos usar a função computed() para criar um novo signal que se atualiza automaticamente sempre que suas dependências mudam.

    O computed() cria um signal de memorização, que calcula seu valor a partir dos valores de um número qualquer de signals de entrada.

    Como usar

    totalDeJogos = computed(() => jogos().length)
    

    A função computed retorna outro Signal, todos os signals usados por computation serão rastreados como dependências, e o valor do novo signal recalculado sempre que alguma dessas dependências mudar.

    Note que a função computed retorna um Signal e não um WritableSignal, o que significa que ele não pode ser modificado manualmente usando métodos como set, update. Em vez disso, ele é atualizado automaticamente sempre que um de seus signals pais dependentes muda.

    Agora podemos adicionar um effect ou criar outro signal com a função computed baseado neste novo Signal.

    Qualquer mudança nos valores agora será propagada no gráfico de dependências.

    Diagrama de fluxo de dados e notificações em fundo degradê azul. No centro superior, um retângulo azul claro com o texto 'Signal' e ao lado, uma anotação 'Altera valor por: - set - update' seguido por 'Novo VALOR'. O 'Signal' emite três notificações: à esquerda para 'effectFn' que leva a 'Side effect', ao centro para 'Computation' que leva a 'Novo Signal', e à direita para outro 'effectFn' seguido por 'Side effect'. Cada 'Novo Signal' e 'Computation' está conectado um ao outro indicando um ciclo computacional. As conexões são marcadas com as palavras 'notifica' e 'computed'. No canto inferior direito, o logotipo 'alura' em branco.

    Para ilustrar os conceitos aprendidos, criei esse projeto que explica os Angular signals e demonstra como criar e atualizar signals e criar valores computados.

    É isso! Neste artigo, mergulhamos no mundo fascinante dos Angular Signals, explorando sua natureza, necessidade e aplicabilidade em projetos reais. Espero que esta jornada tenha não apenas esclarecido o conceito e utilidade dos Signals, mas também despertado a sua curiosidade e entusiasmo para integrá-los em suas próprias aplicações Angular.

    Para levar seu aprendizado um passo adiante, tenho uma sugestão especial: que tal colocar em prática tudo o que aprendeu aqui e muito mais? Na formação Desenvolva Aplicações Escaláveis com Angular aqui na Alura, construímos juntos uma aplicação completa do zero, onde você terá a oportunidade de aplicar conceitos de Angular Signals e explorar o potencial do Material Design para criar interfaces atraentes e funcionais.

    Essa formação é a oportunidade perfeita para aprofundar seus conhecimentos, experimentar com as ferramentas mais atuais e dar vida às suas ideias. Junte-se a nós nessa jornada de aprendizado e inovação, e vamos juntos criar aplicações incríveis com Angular e Material Design!

    Banner da Alura convidando profissionais a desenvolver habilidades em inteligência artificial para acompanhar as transformações do mercado de tecnologia. A campanha destaca que quem utiliza IA produz mais, cresce na carreira e se torna mais competitivo, reforçando que a inteligência artificial deixou de ser tendência e passou a ser uma habilidade essencial. O banner incentiva a começar a aprender IA com os cursos da Alura e impulsionar a transformação digital.

    Avalie este artigo

    Foto de Vinicios Neves

    Autor(a)

    Vinicios Neves

    Vinicios Neves, Tech Lead e Educador, mistura código e didática há mais de uma década. Especialista em TypeScript, lidera equipes full-stack em Portugal e inspira futuros desenvolvedores na FIAP e Alura. Com um pé no código e outro no ensino, ele prova que a verdadeira engenharia de software vai além das linhas de código. Além de, claro, ser senior em falar que depende.

    Explore por tópico

    • Mobile
    • Back-end
    • Front-end
    • DevOps
    • UX & Design
    • Dados
    • Gestão & Negócios
    • Inteligência Artificial
    • Cibersegurança
    • Cloud

    Leia também

    • Alura
      06/03/2020

      JavaScript: Quando devo usar forEach e map?

      Ler mais
    • 24/02/2021

      HTML, CSS e Javascript, quais as diferenças?

      Ler mais
    • 10/07/2016

      Desenhando a logo da Caelum com CSS

      Ler mais
    Ver mais conteúdos

    Inscreva-se em nossa Newsletter

    Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.

    Institucional

    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status
    Institucional
    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status

    A Alura

    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes
    A Alura
    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes

    Conteúdos

    • Alura Cases
    • Imersões
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Conteúdos
    • Alura Cases
    • Imersões
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Alura