Skip to content

Commit faf2f8e

Browse files
authored
[Blog Post] angular article of linked signal & resource api (playfulprogramming#1206)
This article introduces two significant features in Angular 19 aimed at improving state management and asynchronous data handling: linkedSignal: A new function that simplifies creating writable signals that automatically update based on the value of another signal. This resolves previous challenges where writable, dependent signals were difficult to manage, providing more predictable and maintainable state synchronization. Resource API: A reactive solution for handling asynchronous data fetching. This API simplifies the process of loading data (e.g., via HTTP requests), automatically managing loading states, error handling, and local updates, thereby reducing boilerplate and improving the reliability of data operations.
2 parents 9eb4809 + 50eb03d commit faf2f8e

File tree

3 files changed

+121
-0
lines changed

3 files changed

+121
-0
lines changed

content/oussemanjimi/index.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
{
3+
name: "Mohamed Oussema Njimi",
4+
firstName: "Mohamed Oussema",
5+
lastName: "Njimi",
6+
description: "Senior Angular Developer based in France.",
7+
socials: {
8+
github: "MedOussemaNjimi",
9+
website: "https://www.medoussemanjimi.fr/",
10+
linkedIn: "mohamed-oussema-njimi"
11+
},
12+
pronouns: "he/him",
13+
profileImg: "./mohamedOussema.jpeg",
14+
color: "#3867d6",
15+
roles: ["developer"]
16+
}
17+
---
18.6 KB
Loading
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
---
2+
{
3+
title: "Angular 19: linkedSignal & Resource API",
4+
description: "Let's learn about Angular19's linkedSignal & Resource APIs!",
5+
published: '2024-11-19T16:00:00.000Z',
6+
tags: ["angular" , "javascript"],
7+
license: 'cc-by-4'
8+
}
9+
---
10+
11+
Angular 19 introduces two powerful features designed to improve reactive programming and data management: the `linkedSignal` function and the Resource API. These enhancements address challenges in state synchronization and asynchronous data handling, providing developers with more efficient tools for building scalable applications.
12+
13+
# linkedSignal: Simplifying Signal Synchronization
14+
15+
In earlier versions of Angular, managing state that was dependent on other signals often required complex workarounds. Developers typically used `computed()` signals to derive values based on other signals. However, `computed()` signals are read-only which limited the ability to create signals that could both derive values from others and be updated independently.
16+
17+
18+
19+
The new `linkedSignal` function in Angular 19 resolves this limitation by providing a way to create writable signals that are automatically updated based on the value of another signal. This feature simplifies signal synchronization, making state management more predictable and maintainable.
20+
21+
## Example:
22+
23+
```typescript
24+
import { signal, linkedSignal } from '@angular/core';
25+
26+
const sourceSignal = signal(0);
27+
const updatedSignal = linkedSignal({
28+
source: sourceSignal,
29+
computation: () => sourceSignal() * 5,
30+
});
31+
```
32+
33+
In this example, `updatedSignal` will always be five times the value of `sourceSignal` and will automatically adjust as `sourceSignal` changes.
34+
35+
## Addressing Existing Challenges:
36+
37+
Before the introduction of `linkedSignal`, developers faced difficulties in creating signals that were both dependent on other signals and writable. This often led to convoluted code structures and increased the potential for errors. By providing a straightforward method to create such signals, `linkedSignal` enhances code clarity and reduces the likelihood of bugs related to state management.
38+
39+
## Resource API: Streamlined Data Loading
40+
41+
Handling asynchronous data, especially from HTTP requests, can be cumbersome in Angular. Developers often had to manually manage loading, success, and error states, leading to verbose and error-prone code.
42+
43+
The `Resource API` introduced in Angular 19 takes a reactive approach to data loading, particularly useful for operations like HTTP GET requests. It allows developers to define a loader function that asynchronously fetches data and automatically tracks the loading state, simplifying error handling and status monitoring.
44+
45+
## Example:
46+
47+
```typescript
48+
import { resource } from '@angular/core';
49+
50+
const productResource = resource({
51+
loader: async () => {
52+
const response = await fetch('https://api.example.com/products');
53+
return response.json();
54+
}
55+
});
56+
```
57+
58+
In this example, updatedSignal will always be five times the value of sourceSignal and will automatically adjust as sourceSignal changes.
59+
60+
Addressing Existing Challenges:
61+
62+
Before the introduction of linkedSignal, developers faced difficulties in creating signals that were both dependent on other signals and writable. This often led to convoluted code structures and increased the potential for errors. By providing a straightforward method to create such signals, linkedSignal enhances code clarity and reduces the likelihood of bugs related to state management.
63+
64+
Resource API: Streamlined Data Loading
65+
66+
Managing asynchronous data loading, especially through HTTP requests, has been a complex task in Angular applications. Developers needed to handle various states of data fetching manually, including loading, success, and error states, which often resulted in verbose and error-prone code.
67+
68+
The Resource API in Angular 19 offers a reactive approach to loading resources, particularly for read operations like HTTP GET requests. It allows developers to define a loader function that asynchronously fetches data and provides signals to monitor the current status and handle errors effectively.
69+
70+
## Example:
71+
```typescript
72+
import { resource } from '@angular/core';
73+
74+
const productResource = resource({
75+
loader: async () => {
76+
const response = await fetch('https://api.example.com/products');
77+
return response.json();
78+
}
79+
});
80+
```
81+
82+
In this example, `productResource` is initialized with a loader function that fetches data from the specified API. The Resource API takes care of managing the loading state and handling errors, thus streamlining the data-fetching process.
83+
84+
## Key Features of the Resource API:
85+
86+
Status Tracking: Signals such as `status`, `error`, and `isLoading` allow developers to monitor the current state of the data loading process, facilitating better user feedback and error handling. The `status` signal can have the following values:
87+
* Idle (0): The resource is in its initial state and has not started loading.
88+
* Error (1): An error occurred during the loading process.
89+
* Loading (2): The resource is currently loading data.
90+
* Reloading (3): The resource is reloading data, typically after a previous load.
91+
* Resolved (4): The resource has successfully loaded data.
92+
* Local (5): The resource's data has been updated locally without a new load.
93+
94+
* **Local Updates:** Developers can use the `update` method to modify the loaded data locally without triggering a new load, providing greater flexibility in managing state.
95+
* **Request Management:** The Resource API automatically restarts the loading process when dependent signals change and can cancel ongoing requests to prevent race conditions, ensuring data consistency.
96+
97+
## Overcoming Previous Hurdles:
98+
99+
Before the Resource API, developers had to manually handle multiple states (loading, success, error) for each HTTP request, which could lead to repetitive and error-prone code. The Resource API abstracts these concerns and offers a more declarative approach, reducing boilerplate code and improving the reliability of data fetching.
100+
101+
## Conclusion
102+
103+
Angular 19's introduction of `linkedSignal` and the `Resource API` significantly enhances the framework's capabilities for managing reactive state and handling asynchronous data. These features streamline complex tasks and help developers build more maintainable, performant applications. By utilizing these tools, developers can create cleaner, more efficient code while improving the overall user experience.
104+

0 commit comments

Comments
 (0)