Les Signals : concepts fondamentaux

Qu’est-ce qu’un Signal ?

Un Signal est un conteneur de valeur qui notifie ses consommateurs lorsqu’il change.

src/app/counter.ts
import { signal } from '@angular/core';
const count = signal(0);
console.log(count()); // 0 — lecture via appel de fonction
count.set(5);
console.log(count()); // 5

Computed : valeurs dérivées

src/app/counter.ts
import { signal, computed } from '@angular/core';
const firstName = signal('Nicolas');
const lastName = signal('Dupont');
const fullName = computed(() => `${firstName()} ${lastName()}`);
console.log(fullName()); // "Nicolas Dupont"
firstName.set('Jean');
console.log(fullName()); // "Jean Dupont" — recalculé automatiquement

Effects : réactions aux changements

src/app/logger.service.ts
import { signal, effect } from '@angular/core';
const theme = signal<'light' | 'dark'>('light');
effect(() => {
document.body.setAttribute('data-theme', theme());
});
theme.set('dark'); // applique automatiquement l'attribut

Interop avec RxJS

src/app/data.component.ts
import { toSignal, toObservable } from '@angular/core/rxjs-interop';
// Observable → Signal
const data = toSignal(this.http.get('/api/data'), { initialValue: null });
// Signal → Observable
const count$ = toObservable(this.count);