analogjs/angular-signals

Implemente gerenciamento de estado reativo baseado em signals no Angular v20+. Use para criar estado reativo com signal(), estado derivado com computed(), estado dependente com linkedSignal() e efeitos colaterais com effect(). Aciona em perguntas sobre gerenciamento de estado, conversão de padrões BehaviorSubject/Observable para signals ou implementação de fluxos de dados reativos.

O que é angular-signals?

Esta skill fornece orientação especializada para implementar gerenciamento de estado reativo baseado em signals no Angular v20+. Ela cobre os conceitos fundamentais: signal() para estado reativo básico, computed() para estado derivado que recalculado automaticamente, linkedSignal() para estado dependente sincronizado com outras fontes, e effect() para executar efeitos colaterais sempre que o estado subjacente mudar. A skill é acionada automaticamente quando o usuário faz perguntas sobre gerenciamento de estado, precisa converter padrões existentes de BehaviorSubject/Observable para signals, ou deseja implementar fluxos de dados reativos. Ela suporta as melhores práticas para migração progressiva e uso eficiente de signals, garantindo código mais limpo, melhor desempenho de detecção de mudanças e maior legibilidade. É uma ferramenta essencial para desenvolvedores Angular que desejam modernizar seus aplicativos com a API de signals introduzida no Angular 16+ e totalmente integrada no Angular v20+.

Funciona com~Claude Code~Codex CLI~Cursor
Part ofReact
npx skills add https://github.com/analogjs/angular-skills/tree/main/skills/angular-signals

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que angular-signals faz?

Implemente gerenciamento de estado reativo baseado em signals no Angular v20+. Use para criar estado reativo com signal(), estado derivado com computed(), estado dependente com linkedSignal() e efeitos colaterais com effect(). Aciona em perguntas sobre gerenciamento de estado, conversão de padrões BehaviorSubject/Observable para signals ou implementação de fluxos de dados reativos.

Visão Geral

Esta skill ajuda você a implementar gerenciamento de estado reativo usando a API de Signals do Angular. Signals são primitivas reativas que notificam consumidores quando o estado muda, oferecendo melhor desempenho e código mais limpo em comparação com padrões tradicionais como BehaviorSubject/Observable.

Principais Conceitos

signal()

Cria um estado reativo que pode ser lido e atualizado diretamente.

import { signal } from '@angular/core';

const contador = signal(0);

// Leitura
console.log(contador()); // 0

// Atualização
contador.set(5);
contador.update(valor => valor + 1);

computed()

Cria estado derivado que recalcula automaticamente quando suas dependências mudam.

import { signal, computed } from '@angular/core';

const nome = signal('João');
const saudacao = computed(() => `Olá, ${nome()}!`);

console.log(saudacao()); // "Olá, João!"

nome.set('Maria');
console.log(saudacao()); // "Olá, Maria!" (atualizado automaticamente)

linkedSignal()

Cria um signal vinculado a outro signal ou fonte externa, sincronizando automaticamente.

import { signal, linkedSignal } from '@angular/core';

const usuarioId = signal(1);
const perfil = linkedSignal(() => fetchPerfil(usuarioId()));

// Quando usuarioId mudar, perfil será atualizado automaticamente

effect()

Executa efeitos colaterais sempre que seus signals dependentes mudam.

import { signal, effect } from '@angular/core';

const dados = signal([]);

effect(() => {
  console.log('Dados atualizados:', dados());
  // Pode chamar APIs, fazer logging, etc.
});

Migração de BehaviorSubject/Observable

Para converter de padrões baseados em Observables para Signals:

Antes:

private estado$ = new BehaviorSubject<string>('inicial');
estado$: Observable<string> = this.estado$.asObservable();

atualizarEstado(novo: string) {
  this.estado$.next(novo);
}

Depois:

estado = signal<string>('inicial');

atualizarEstado(novo: string) {
  this.estado.set(novo);
}

Exemplo Prático

import { Component, signal, computed, effect } from '@angular/core';

@Component({
  selector: 'app-contador',
  template: `
    <p>Contagem: {{ contagem() }}</p>
    <p>Dobro: {{ dobro() }}</p>
    <button (click)="incrementar()">+1</button>
  `
})
export class ContadorComponent {
  contagem = signal(0);
  dobro = computed(() => this.contagem() * 2);

  log = effect(() => {
    console.log('Nova contagem:', this.contagem());
  });

  incrementar() {
    this.contagem.update(v => v + 1);
  }
}

Melhores Práticas

  • Use signal() para estado local e mutável.
  • Use computed() para estado derivado que deve ser recalculado automaticamente.
  • Use effect() apenas para efeitos colaterais (logging, integração com bibliotecas externas).
  • Evite usar signals em templates como propriedades simples; use signal() diretamente no template.
  • Considere migrar gradualmente de BehaviorSubject para signals em novos componentes.

Referências

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

analogjs/angular-component

Create modern Angular standalone components following v20+ best practices. Use for building UI components with signal-based inputs/outputs, OnPush change detection, host bindings, content projection, and lifecycle hooks. Triggers on component creation, refactoring class-based inputs to signals, adding host bindings, or implementing accessible interactive components.

analogjs/angular-di

Implement dependency injection in Angular v20+ using inject(), injection tokens, and provider configuration. Use for service architecture, providing dependencies at different levels, creating injectable tokens, and managing singleton vs scoped services. Triggers on service creation, configuring providers, using injection tokens, or understanding DI hierarchy.

analogjs/angular-directives

Create custom directives in Angular v20+ for DOM manipulation and behavior extension. Use for attribute directives that modify element behavior/appearance, structural directives for portals/overlays, and host directives for composition. Triggers on creating reusable DOM behaviors, extending element functionality, or composing behaviors across components. Note - use native @if/@for/@switch for control flow, not custom structural directives.

analogjs/angular-forms

Build signal-based forms in Angular v21+ using the new Signal Forms API. Use for form creation with automatic two-way binding, schema-based validation, field state management, and dynamic forms. Triggers on form implementation, adding validation, creating multi-step forms, or building forms with conditional fields. Signal Forms are experimental but recommended for new Angular projects. Don't use for template-driven forms without signals or third-party form libraries like Formly or ngx-formly.

analogjs/angular-http

Implement HTTP data fetching in Angular v20+ using resource(), httpResource(), and HttpClient. Use for API calls, data loading with signals, request/response handling, and interceptors. Triggers on data fetching, API integration, loading states, error handling, or converting Observable-based HTTP to signal-based patterns.

analogjs/angular-routing

Implement routing in Angular v20+ applications with lazy loading, functional guards, resolvers, and route parameters. Use for navigation setup, protected routes, route-based data loading, and nested routing. Triggers on route configuration, adding authentication guards, implementing lazy loading, or reading route parameters with signals.

analogjs/angular-ssr

Implement server-side rendering and hydration in Angular v20+ using @angular/ssr. Use for SSR setup, hydration strategies, prerendering static pages, and handling browser-only APIs. Triggers on SSR configuration, fixing hydration mismatches, prerendering routes, or making code SSR-compatible.

analogjs/angular-testing

Write unit and integration tests for Angular v20+ applications using Vitest or Jasmine with TestBed and modern testing patterns. Use for testing components with signals, OnPush change detection, services with inject(), and HTTP interactions. Triggers on test creation, testing signal-based components, mocking dependencies, or setting up test infrastructure. Don't use for E2E testing with Cypress or Playwright, or for testing non-Angular JavaScript/TypeScript code.

analogjs/angular-tooling

Use Angular CLI and development tools effectively in Angular v20+ projects. Use for project setup, code generation, building, testing, and configuration. Triggers on creating new projects, generating components/services/modules, configuring builds, running tests, or optimizing production builds. Don't use for Nx workspace commands, custom Webpack configurations, or non-Angular CLI build systems like Vite standalone or esbuild direct usage.

Habilidades Relacionadas