0Pricing
Angular Academy · Aula

Subjects e BehaviorSubject

Distribua valores em vários assinantes com subjects.

Subjects e BehaviorSubject é uma aula grátis de Angular Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Angular Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Angular Academy inclui 4 aulas no total.

O que é um assunto

Um Subject é tanto um observável quanto um observador. Você pode se inscrever nele e também enviar valores para ele com next(). Ele faz difusão: todos os assinantes recebem as mesmas emissões.

Criando e usando um assunto

Assinantes adicionados depois que um valor foi emitido não recebem os valores anteriores.

import { Subject } from 'rxjs';

const events$ = new Subject<string>();
events$.subscribe(v => console.log('A:', v));

events$.next('hello'); // A: hello
events$.subscribe(v => console.log('B:', v));
events$.next('world'); // A: world, B: world

Os assuntos fazem difusão

Ao contrário de um observável frio, que é executado separadamente para cada assinante, um assunto compartilha uma única execução. Cada assinante recebe o mesmo valor ao mesmo tempo.

BehaviorSubject

Um BehaviorSubject exige um valor inicial e memoriza o valor mais recente. Novos assinantes recebem imediatamente o valor atual.

import { BehaviorSubject } from 'rxjs';

const count$ = new BehaviorSubject<number>(0);
count$.subscribe(v => console.log('A:', v)); // A: 0
count$.next(5);
count$.subscribe(v => console.log('B:', v)); // B: 5 (gets latest)

Lendo o valor atual

BehaviorSubject expõe seu valor atual de forma síncrona por meio de .value ou .getValue(). Assuntos simples não têm esse recurso.

const state$ = new BehaviorSubject({ loggedIn: false });
console.log(state$.value); // { loggedIn: false }
state$.next({ loggedIn: true });
console.log(state$.getValue()); // { loggedIn: true }

Assunto como armazenamento simples

BehaviorSubject é um contêiner de estado leve comum nos serviços do Angular: armazena o estado, expõe-o como um observável somente leitura e envia atualizações com next.

class CounterService {
  private count$ = new BehaviorSubject(0);
  readonly value$ = this.count$.asObservable();
  increment() { this.count$.next(this.count$.value + 1); }
}

asObservable para encapsulamento

Exponha .asObservable() para que os consumidores possam se inscrever, mas não chamar next() e corromper seu estado.

private data$ = new Subject<number>();
readonly stream$ = this.data$.asObservable();
// consumers: stream$.subscribe(...) but no stream$.next()

ReplaySubject

ReplaySubject reproduz um número configurável de valores anteriores para novos assinantes — útil para armazenar em cache os últimos N eventos.

import { ReplaySubject } from 'rxjs';

const recent$ = new ReplaySubject<number>(2); // buffer last 2
recent$.next(1); recent$.next(2); recent$.next(3);
recent$.subscribe(v => console.log(v)); // 2, 3

Subject versus BehaviorSubject

Subject: sem valor inicial; assinantes que chegam tarde não recebem emissões anteriores.
BehaviorSubject: tem um valor inicial; assinantes que chegam tarde recebem o valor mais recente. Para o estado da interface, BehaviorSubject costuma ser a melhor opção.

Concluindo um assunto

Chame complete() para encerrar o assunto. Depois da conclusão, os valores enviados com next() são ignorados e os assinantes são liberados. Sempre conclua os assuntos em serviços que são destruídos.

const s$ = new Subject<number>();
s$.subscribe(v => console.log(v));
s$.next(1);
s$.complete();
s$.next(2); // ignored

Assuntos fazem a ponte entre o imperativo e o reativo

Os assuntos permitem transformar eventos imperativos (um manipulador de clique de botão ou uma mensagem de WebSocket) em um fluxo observável ao qual o restante do aplicativo pode reagir de forma declarativa.

Verificação rápida

Teste sua compreensão sobre assuntos.

Recapitulação: assuntos e BehaviorSubject

Assuntos são fluxos com difusão nos quais você pode enviar valores.

  • Subject: não mantém memória dos valores anteriores.
  • BehaviorSubject: mantém e reproduz o valor mais recente; possui .value.
  • ReplaySubject: reproduz os últimos N valores.
  • Exponha-os com asObservable() para proteger o estado.

A seguir: cancelamento de inscrições e vazamentos de memória.

Perguntas Frequentes

A aula “Subjects e BehaviorSubject” é grátis?

Sim — o texto completo de “Subjects e BehaviorSubject” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Angular Academy, atualize para CoddyKit PRO. O curso de Angular Academy inclui 4 aulas no total.

O que vou aprender em “Subjects e BehaviorSubject”?

Distribua valores em vários assinantes com subjects. Você pratica Angular Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Angular Academy?

Nenhuma experiência prévia é necessária. Angular Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Subjects e BehaviorSubject”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Angular Academy?

Sim. Cada aula de Angular Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Observáveis e inscrições
  2. Subjects e BehaviorSubject
  3. Cancelamento de inscrições e vazamentos de memória
  4. O pipe async
← Voltar para Angular Academy