DEV Community

Cover image for Criando Observáveis e Inscritores em Componentes Angular
Levy Henrique Alves Nunes
Levy Henrique Alves Nunes

Posted on

Criando Observáveis e Inscritores em Componentes Angular

Ao desenvolver aplicações Angular, você provavelmente encontrará a necessidade de lidar com operações assíncronas, seja para buscar dados de uma API, responder a eventos do usuário ou qualquer outra operação que não ocorra instantaneamente. Uma das maneiras mais elegantes de lidar com operações assíncronas em Angular é usando Observáveis do RxJS. Neste post, vamos nos aprofundar em como criar Observáveis e Inscritores (Subscribers) em componentes Angular.

1. Introdução aos Observáveis

Observáveis são uma parte central do RxJS, uma biblioteca de programação reativa amplamente usada em aplicações Angular. Eles fornecem uma maneira de produzir uma sequência de valores usando uma API baseada em push, onde os valores são "empurrados" para os inscritores.

Criando um Observável Simples

Para criar um observável, você pode usar a função new Observable() do RxJS:

import { Observable } from 'rxjs';

const meuObservable = new Observable(subscriber => {
  subscriber.next('Olá');
  subscriber.next('Mundo');
  subscriber.complete();
});
Enter fullscreen mode Exit fullscreen mode

2. Inscritores (Subscribers)

Um inscrito é basicamente o consumidor de um observável. Para iniciar a emissão de valores, você deve se inscrever no observável:

meuObservable.subscribe(valor => console.log(valor));
Enter fullscreen mode Exit fullscreen mode

Quando executado, isso irá imprimir:

Olá
Mundo
Enter fullscreen mode Exit fullscreen mode

3. Integrando Observáveis em Componentes Angular

Ao trabalhar com Angular, muitas vezes você desejará integrar observáveis diretamente em seus componentes.

Exemplo: Buscando dados de uma API

Vamos considerar um serviço que retorna dados de uma API:

// meu-servico.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class MeuServicoService {

  constructor(private http: HttpClient) { }

  buscarDados(): Observable<any> {
    return this.http.get('https://api.exemplo.com/dados');
  }
}
Enter fullscreen mode Exit fullscreen mode

No componente, você pode se inscrever nesse observável:

// meu-componente.component.ts

import { Component, OnInit } from '@angular/core';
import { MeuServicoService } from './meu-servico.service';

@Component({
  selector: 'app-meu-componente',
  templateUrl: './meu-componente.component.html'
})
export class MeuComponenteComponent implements OnInit {

  dados: any;

  constructor(private meuServico: MeuServicoService) { }

  ngOnInit(): void {
    this.meuServico.buscarDados().subscribe(
      data => this.dados = data,
      error => console.error('Erro ao buscar dados:', error)
    );
  }
}
Enter fullscreen mode Exit fullscreen mode

4. Lidando com Desinscrição

É importante lembrar de desinscrever-se de observáveis para evitar vazamentos de memória. O Angular fornece o ciclo de vida do componente ngOnDestroy para esse propósito:

import { Component, OnInit, OnDestroy } from '@angular/core';
import { MeuServicoService } from './meu-servico.service';
import { Subscription } from 'rxjs';

@Component({
  selector: 'app-meu-componente',
  templateUrl: './meu-componente.component.html'
})
export class MeuComponenteComponent implements OnInit, OnDestroy {

  dados: any;
  inscricao!: Subscription;

  constructor(private meuServico: MeuServicoService) { }

  ngOnInit(): void {
    this.inscricao = this.meuServico.buscarDados().subscribe(
      data => this.dados = data,
      error => console.error('Erro ao buscar dados:', error)
    );
  }

  ngOnDestroy(): void {
    this.inscricao.unsubscribe();
  }
}
Enter fullscreen mode Exit fullscreen mode

Conclusão

Os Observáveis fornecem uma maneira poderosa de trabalhar com operações assíncronas em Angular. Compreender como criar e se inscrever em observáveis, bem como gerenciar a desinscrição, é fundamental para desenvolver aplicações Angular eficientes e sem vazamentos de memória. O RxJS, com sua ampla variedade de operadores, torna a experiência de trabalhar com observáveis ainda mais enriquecedora e permite manipular streams de dados de maneira muito flexível.

Top comments (0)