Charger des données avec resource() et httpResource()
subscribe() manuel, de gestion d'état à la main ( loading , error , data ) et de fuites mémoire quand on oubliait un unsubscribe . Depuis Angular 21, resource() et httpResource() encapsulent tout ça dans une primitive réactive bâtie sur les signals .
Le modèle resource()
resource() lie une requête réactive à un loader asynchrone. Quand un signal lu dans le params change, Angular relance automatiquement le loader et annule la requête en vol via un AbortSignal . Le résultat est un objet de signals : value() , error() , status() , plus isLoading() .
userId suffit : pas de subscribe , pas de takeUntilDestroyed . Le resource recharge, expose isLoading() pendant l'appel, et annule la requête précédente.
httpResource pour les appels REST
httpResource() est la variante taillée pour HttpClient : elle traverse les intercepteurs, gère le typage de la réponse et réagit aux changements d'URL. On lui passe une fonction qui retourne l'URL (ou un objet de requête complet) dérivée de signals.
async :
Les états et leurs pièges
status() renvoie une valeur parmi idle , loading , reloading , resolved , error et local . Deux subtilités méritent l'attention :
- ›
pendant un rechargement , value()garde l'ancienne donnée (reloading), ce qui évite
- ›
httpResourceest pensé pour la lecture (GET). Pour un POST/PUT, on reste sur
HttpClient classique : un resource se relance dès que sa requête change, ce qui n'a pas de sens pour une mutation.
Pourquoi abandonner les souscriptions manuelles
resource , la dépendance devient déclarative — le loader se relance parce qu'un signal a changé, point. On supprime les BehaviorSubject de pagination, les switchMap défensifs et les finalize pour remettre loading à false . La doc officielle détaille l'API dans le guide async avec resource .
resource()ne remplace pas RxJS : il remplace la plomberie . Tu décris quoi charger et de quoi ça dépend ; Angular s'occupe du quand, de l'annulation et de l'état. Le composant redevient une simple lecture de signals.