Signal Atlasmodern Angular fieldbook
Angular 22 · Reactive Web ApplicationsView Markdown source

Signals, computed state, linkedSignal, and resources

Signals are Angular's granular synchronous reactive state model.

Writable and computed

items = signal<Order[]>([]);
query = signal('');
visible = computed(() =>
  this.items().filter(item => item.name.includes(this.query()))
);

Store source state in writable signals. Derive state with computed; do not copy derived values into another writable signal.

Effects

Effects synchronize state with non-reactive side effects such as logging, storage, or imperative APIs. They are not the default way to propagate state. Avoid writing signals inside effects when a computed relationship exists.

linkedSignal

linkedSignal models writable state that depends on another source—for example, a selected option that resets only when it becomes invalid after options change.

resource and httpResource

Resources combine reactive parameters with asynchronous loading, cancellation, status, value, and error signals. resource and httpResource are stable since Angular 22. httpResource uses HttpClient and interceptors. Guard value() with hasValue() because an error-state read can throw.

Use HttpClient methods directly for mutations. A resource is naturally suited to reads whose parameters are reactive.

Equality and mutation

Signals notify on updates according to equality. Mutating an array in place can hide change. Create the next value:

this.items.update(items => [...items, created]);

RxJS interop

toSignal subscribes to an Observable within lifecycle ownership. toObservable exposes signal changes as an Observable. Convert once at a boundary and keep the internal model consistent.

Feynman check

A signal is a labeled value with subscribers. A computed signal is a formula. An effect is a messenger leaving Angular's reactive graph. A resource is a managed async request with state.

Signal AtlasIndependent study material · verify version details in official project documentation