Back to blog

Angular 21 Signals Explained: Signals, Signal Forms

In-depth Angular 21 Signals guide for 2026: learn signals, Signal Forms, zoneless change detection, and how to use Angular Signals with RxJS and HttpClient.

RJ
RAMA JONNADA
Senior Frontend Developer with 4+ years of experience in Angular and modern web technologies.

TL;DR: Angular 21 makes signals the default way to manage state. A signal is a reactive value you read by calling it (count()) and update with .set() or .update(). Signal Forms bring that same reactivity to forms without heavy FormBuilder setup, and signals pair naturally with zoneless change detection so Angular only updates when a value you actually use changes. RxJS still handles streams and events, with toSignal() and toObservable() bridging the two.

Angular 21 introduces powerful changes to reactive state management. Among the most important Angular 21 new features are signals, signal forms, and zoneless change detection.

Angular has changed a lot over the years, but Angular 21 Signals might be the biggest shift yet. Angular has evolved a lot over the years. If you’re new to Angular, you may want to start with Angular fundamentals guide before diving into Angular 21 Signals.

In 2026, Angular apps are faster, cleaner, and easier to reason about thanks to signals, zoneless change detection, and better RxJS integration.

If you are still thinking in terms of Observable + async pipe + Zone.js, this guide will help you catch up. We will break everything down in simple words and use real examples you can relate to.

What are Angular Signals?

At the simplest level, a signal is a reactive value.

It holds data, and Angular automatically knows when that data changes. When a signal changes, only the parts of the UI that depend on it update.

Angular Signals are a fine‑grained reactivity primitive that store a value, track where that value is read, and notify Angular when the value changes. You can also read the official Angular Signals documentation

Instead of dirty‑checking everything on every change detection cycle, Angular can now update only the bindings that depend on changed Signals. Think of a signal like a smart variable.

import { signal } from '@angular/core';

const counter = signal(0);
  • counter() → reads the value
  • counter.set(1) → updates the value
  • counter.update(v => v + 1) → updates based on the old value

No subscriptions. No manual change detection. No async pipe.

Core properties of Signals:

  • A signal is a reactive value: you read it like count() and write using set, update, or mutate.
  • Computed signals derive new values from other signals and automatically track dependencies.
  • Effects run side‑effects whenever dependent signals change, such as logging, DOM work, or HTTP calls.

Why Angular Signals Matter in 2026 ?

Before signals, Angular relied heavily on:

  • Zone.js
  • Change detection cycles
  • RxJS for almost everything

This worked, but it was complex and sometimes slow.

With Angular 21 signals, you get:

  • Faster rendering
  • Less boilerplate
  • Clear data flow
  • Better performance for large apps
  • Easier debugging

Angular now behaves more like modern reactive frameworks, while still keeping its structure.


A Simple Example: Counter App

Let’s compare old Angular vs Angular 21 signals.

count = 0;

increment() {
  this.count++;
}

Angular had to check the whole component tree to update the UI.

With Angular 21 signals

count = signal(0);

increment() {
  this.count.update(v => v + 1);
}

Template:

<p>Count: {{ count() }}</p>
<button (click)="increment()">+</button>

Angular knows exactly which part depends on count. Only that part updates.


Computed Signals: Derived State

A computed signal is a value calculated from other signals.

import { signal, computed } from '@angular/core';

price = signal(100);
tax = signal(10);

total = computed(() => {
    return this.price() + this.tax();
});

Whenever price or tax changes, total updates automatically.

Practical example

In an online store:

  • Product price
  • Discount
  • Final total Computed signals keep this logic clean and bug-free.

Effect Signals: Reacting to Changes

Effects let you run code when a signal changes.

import { effect } from '@angular/core';

effect(() => {
    console.log('Counter changed:', this.count());
});

Good use cases for effects:

  • Logging
  • Saving data to local storage
  • Analytics events
  • Triggering API calls Avoid putting complex business logic inside effects.

Signal Forms in Angular 21

Angular 21 introduces Signal Forms, which make forms easier and cleaner.

Example: Login Form

import { signalForm } from '@angular/forms';

loginForm = signalForm({
    email: '',
    password: '',
});

Read values:

this.loginForm.value().email;

Update values:

this.loginForm.patchValue({
    email: 'user@example.com',
});

Why Signal Forms Are Better

  • No heavy FormBuilder setup
  • No manual subscriptions
  • Instant UI updates
  • Clear and readable validation logic

Signal Forms work especially well in large applications.


Zoneless Change Detection in Simple Words

Angular 21 allows you to run apps without Zone.js.

Earlier:

  • Any async action triggered change detection everywhere

Now:

  • Angular updates only when signals change
  • No unnecessary checks
  • Better performance

Why this is important

For dashboards, admin panels, and data-heavy apps, zoneless change detection reduces lag and CPU usage.

New Angular projects should consider going zoneless by default.


Using Angular Signals with RxJS

RxJS is still important. It is great for:

  • Streams
  • WebSockets
  • Complex async flows
  • User event handling

Angular 21 focuses on RxJS interoperability, not replacement.

Convert Observable to Signal

import { toSignal } from '@angular/core/rxjs-interop';

users$ = this.http.get<User[]>('/api/users');
users = toSignal(this.users$, { initialValue: [] });

Template usage:

<li *ngFor="let user of users()">{{ user.name }}</li>

Convert Signal to Observable

import { toObservable } from '@angular/core/rxjs-interop';

users$ = toObservable(this.users);

This makes migration from older Angular code much easier.


Angular Signals with HttpClient

HttpClient still returns observables, but signals simplify UI state handling.

Example: Loading Users

users = signal<User[]>([]);
loading = signal(true);

loadUsers() {
  this.http.get<User[]>('/api/users').subscribe(data => {
    this.users.set(data);
    this.loading.set(false);
  });
}

Template:

<p *ngIf="loading()">Loading...</p>

<ul>
    <li *ngFor="let user of users()">{{ user.name }}</li>
</ul>

No async pipe. No manual change detection.


Best Practices for Angular 21 Signals

Follow these tips in real projects:

  1. Use signals for UI and component state
  2. Use RxJS for streams and events
  3. Keep effects small and focused
  4. Prefer computed signals over manual calculations
  5. Go zoneless for new Angular apps

These practices keep your code clean and predictable.


SEO Benefits of Angular Signals

Angular Signals improve SEO indirectly by:

  • Faster rendering
  • Better Core Web Vitals
  • Reduced UI blocking
  • Improved Angular SSR hydration

Search engines reward fast and stable pages.


Frequently asked questions

What is a signal in Angular 21?

A signal is a reactive value that wraps state. You read it by calling it like a function (count()) and change it with .set() or .update(). Angular tracks exactly where each signal is read, so only those parts of the UI update when the value changes.

What are Signal Forms in Angular 21?

Signal Forms are a forms approach built on signals. They avoid heavy FormBuilder setup and manual subscriptions, give instant UI updates, and keep validation logic clear and readable, which works especially well in large applications.

Do signals replace RxJS in Angular?

No. Angular 21 focuses on RxJS interoperability, not replacement. Use signals for UI and component state, and RxJS for streams, WebSockets, and complex async flows. Bridge them with toSignal() and toObservable().

Should I use signals for a new Angular project?

Yes. For new Angular projects in 2026, signals are the recommended default for most state, combined with RxJS where needed and zoneless change detection for performance.

Final Thoughts

Angular 21 Signals are not just another feature. They change how Angular apps are built.

In 2026, modern Angular applications:

  • Use signals for most state
  • Combine signals with RxJS where needed
  • Avoid Zone.js unless required
  • Keep components simple and readable

If you are starting a new Angular project today, Angular Signals should be your default choice.

They are faster, easier to understand, and built for the future.

Thank you

Topics
angular 21angular signalssignal formszoneless change detectionangular 2026angular reactivity