Els observables són una part fonamental de la programació reactiva a Angular. Proporcionen una manera poderosa de gestionar fluxos de dades asíncrons, com ara sol·licituds HTTP, esdeveniments d'usuari i molt més. En aquest tema, aprendrem què són els observables, com crear-los, com subscriure-s'hi i com utilitzar operadors per transformar i combinar fluxos de dades.
Què és un observable?
Un observable és un objecte que emet una seqüència de valors al llarg del temps. Els observables són una part clau de la llibreria RxJS (Reactive Extensions for JavaScript), que s'integra perfectament amb Angular.
Característiques clau dels observables:
- Emissió de valors: Un observable pot emetre múltiples valors al llarg del temps.
- Asíncron: Els observables poden gestionar operacions asíncrones, com sol·licituds HTTP.
- Subscripció: Per rebre els valors emesos per un observable, cal subscriure-s'hi.
- Cancel·lació: Les subscripcions es poden cancel·lar per evitar fuites de memòria.
Crear un observable
Podem crear un observable utilitzant la funció Observable.create
o utilitzant operadors de creació com of
, from
, interval
, etc.
Exemple: Crear un observable amb of
import { Observable, of } from 'rxjs'; const observable = of(1, 2, 3); observable.subscribe({ next: value => console.log(value), error: err => console.error('Error: ' + err), complete: () => console.log('Completed') });
Explicació del codi:
- Importació: Importem
Observable
iof
de la llibreriarxjs
. - Creació: Utilitzem
of
per crear un observable que emet els valors 1, 2 i 3. - Subscripció: Ens subscrivim a l'observable per rebre els valors emesos. La subscripció té tres parts:
next
(per rebre valors),error
(per gestionar errors) icomplete
(per gestionar la finalització).
Subscripció a un observable
Per rebre els valors emesos per un observable, cal subscriure-s'hi. La subscripció és el procés de registrar funcions de devolució de trucada (callbacks) que gestionen els valors, errors i la finalització.
Exemple: Subscripció a un observable
import { Observable } from 'rxjs'; const observable = new Observable(subscriber => { subscriber.next('Hola'); subscriber.next('Món'); subscriber.complete(); }); observable.subscribe({ next: value => console.log(value), error: err => console.error('Error: ' + err), complete: () => console.log('Completed') });
Explicació del codi:
- Creació: Creem un observable utilitzant el constructor
Observable
. L'observable emet els valors 'Hola' i 'Món' i després es completa. - Subscripció: Ens subscrivim a l'observable per rebre els valors emesos.
Operadors d'observables
Els operadors són funcions que permeten transformar, combinar i gestionar fluxos de dades d'observables. RxJS proporciona una àmplia gamma d'operadors.
Exemple: Utilitzar l'operador map
import { of } from 'rxjs'; import { map } from 'rxjs/operators'; const observable = of(1, 2, 3).pipe( map(value => value * 2) ); observable.subscribe({ next: value => console.log(value), error: err => console.error('Error: ' + err), complete: () => console.log('Completed') });
Explicació del codi:
- Importació: Importem
of
imap
de la llibreriarxjs
. - Creació: Utilitzem
of
per crear un observable que emet els valors 1, 2 i 3. - Transformació: Utilitzem l'operador
map
per multiplicar cada valor per 2. - Subscripció: Ens subscrivim a l'observable per rebre els valors transformats.
Exercici pràctic
Exercici:
Crea un observable que emeti els números de l'1 al 5 amb un retard d'un segon entre cada emissió. Utilitza l'operador map
per multiplicar cada número per 10 i subscriu-te a l'observable per imprimir els valors transformats.
Solució:
import { interval } from 'rxjs'; import { take, map } from 'rxjs/operators'; const observable = interval(1000).pipe( take(5), map(value => (value + 1) * 10) ); observable.subscribe({ next: value => console.log(value), error: err => console.error('Error: ' + err), complete: () => console.log('Completed') });
Explicació del codi:
- Importació: Importem
interval
,take
imap
de la llibreriarxjs
. - Creació: Utilitzem
interval
per crear un observable que emet un valor cada segon. - Limitació: Utilitzem l'operador
take
per limitar l'emissió a 5 valors. - Transformació: Utilitzem l'operador
map
per multiplicar cada valor per 10. - Subscripció: Ens subscrivim a l'observable per rebre els valors transformats.
Conclusió
Els observables són una eina poderosa per gestionar fluxos de dades asíncrons a Angular. Hem après a crear observables, subscriure-s'hi i utilitzar operadors per transformar els fluxos de dades. Amb aquests coneixements, estem preparats per gestionar operacions asíncrones de manera eficient a les nostres aplicacions Angular.
Curs d'Angular
Mòdul 1: Introducció a Angular
- Què és Angular?
- Configuració de l'entorn de desenvolupament
- Arquitectura d'Angular
- Primera aplicació Angular
Mòdul 2: Components d'Angular
- Comprendre els components
- Crear components
- Plantilles de components
- Estils de components
- Interacció de components
Mòdul 3: Enllaç de dades i directives
- Interpolació i enllaç de propietats
- Enllaç d'esdeveniments
- Enllaç de dades bidireccional
- Directives integrades
- Directives personalitzades
Mòdul 4: Serveis i injecció de dependències
Mòdul 5: Enrutament i navegació
Mòdul 6: Formularis a Angular
Mòdul 7: Client HTTP i observables
- Introducció al client HTTP
- Fer sol·licituds HTTP
- Gestionar respostes HTTP
- Utilitzar observables
- Gestió d'errors
Mòdul 8: Gestió d'estat
- Introducció a la gestió d'estat
- Utilitzar serveis per a la gestió d'estat
- NgRx Store
- NgRx Effects
- NgRx Entity
Mòdul 9: Proves a Angular
- Proves unitàries
- Proves de components
- Proves de serveis
- Proves de cap a cap
- Simulació de dependències
Mòdul 10: Conceptes avançats d'Angular
- Angular Universal
- Optimització del rendiment
- Internacionalització (i18n)
- Tubs personalitzats
- Animacions d'Angular