Discover how Angular's Signals have evolved, enhancing reactivity and performance with every release.
Angular 16: The Initial Introduction
Release Date: May 2023
Angular 16 introduced the Signals API as a new way to manage component-local state. It brought basic methods such as:
signal()
set()
update()
computed()
effect()
At this stage, Signals were primarily intended for handling local state within components and did not integrate deeply with Angular’s change detection or lifecycle.
Limitations
- Limited integration with Angular's change detection mechanism.
- Not directly usable with
@Input()
or services.
Angular 17: Deeper Integration
Release Date: November 2023
Building on the initial Signals API, Angular 17 introduced Signal Inputs which allowed developers to bind signals directly to @Input()
properties, enabling automatic reactivity for input changes. It also laid the groundwork for optional signal-based change detection in templates.
Improvements
- Direct binding of signals to
@Input()
properties. - Enhanced template bindings with signals (e.g.,
<p>{{ count() }}</p>
).
Limitations
- Some scenarios, especially within services, still required manual subscriptions.
- Signals were not yet the default reactivity model in Angular.
Angular 18: Stabilization & Optimization
Release Date: June 2024
Angular 18 marked a significant stabilization phase for Signals. They became the recommended method for managing component state, fully integrating with Angular's Dependency Injection (DI) system and offering automatic garbage collection for unused signals. This release also improved performance in zoneless applications and began supporting async signals.
Notable Changes
- Full integration with Angular Dependency Injection (DI).
- Built-in support for async signals.
- Signals started to replace many RxJS use cases for local state management.
Angular 19: Maturity & Best Practices
Release Date: Early 2025
With Angular 19, Signals have matured to become the default reactivity model in Angular. This release introduced a new API for immutable values called readonlySignal()
, integrated Signals with lifecycle hooks like ngOnChanges
, and offered full support for zone-less operation. Additionally, Signal Directives were introduced to handle structural changes in templates seamlessly.
Summary Table
Version | Key Feature | Integration Level | Default Usage | Zone-less Support |
---|---|---|---|---|
Angular 16 | Basic Signals API | Component Only | No | No |
Angular 17 | Signal Inputs | Component + Inputs | No | Partial |
Angular 18 | Async Signals, DI | Component + Services | Recommended | Yes |
Angular 19 | Full Signals Framework, Signal Directives | Global | Default | Yes |
Conclusion
Angular's journey with Signals demonstrates significant progress in simplifying and optimizing state management. Starting from Angular 16's basic implementation, Signals have evolved into a robust default mechanism for reactivity by Angular 19. For managing local component state, Signals now offer a more streamlined, efficient, and performant alternative to traditional RxJS-based approaches.
0 Comments