Angular 19.0+ introduces three new ways to load data efficiently using signals:
1. resource (Promise-based Loader)
The resource API provides a straightforward approach for fetching and updating data asynchronously using Promises. It is ideal for scenarios where you need a simple data-loading mechanism without reactive programming. Since it is promise-based, it follows a request-response pattern, making it suitable for one-time data fetches.
Example usage:
Here, userResource() triggers the function, fetches data from the API, and resolves it using a promise.
2. rxResource (Observable-based Loader)
The rxResource API is designed for Observable-based data fetching, making it ideal for reactive applications where data needs to be streamed or continuously updated. This is especially useful when working with RxJS-based APIs.
Example usage:
Here, timeResource emits a new value whenever it is invoked, utilizing RxJS Observables to provide more control over data streams.
3. httpResource (HttpClient-based Loader)
The httpResource API builds upon resource, but specifically integrates Angular’s HttpClient for making API calls. This allows it to seamlessly manage HTTP requests while taking advantage of the resource primitive’s optimizations.
Example usage:
This approach makes it easier to integrate with Angular’s HttpClient while ensuring optimal performance.
Comparison of resource, rxResource, and httpResource APIs
-
resource (Promise-based Loader)
-
Uses Promises to fetch and update data asynchronously.
-
Suitable for simple, one-time API calls where reactivity is not required.
-
Provides built-in caching and automatic state management.
-
Handles errors using standard try/catch blocks.
-
-
rxResource (Observable-based Loader)
-
Uses RxJS Observables, making it ideal for reactive applications.
-
Supports streaming data, allowing updates over time instead of a single response.
-
Provides more control over data updates using RxJS operators like
map,filter, etc. -
Handles errors through RxJS's catchError mechanism.
-
-
httpResource (HttpClient-based Loader)
-
Specifically designed for API calls using Angular’s HttpClient.
-
Built on top of
resource, meaning it benefits from built-in caching and state management. -
Allows for direct integration with Angular’s dependency injection system.
-
Uses HttpClient’s error handling mechanisms for managing API failures.
-
Each API serves a different use case, and choosing the right one depends on the need for reactivity, HTTP integration, or simplicity.