The Shift Has Begun: Why You Need to Rethink Angular (2/4)

Claire ChengClaire Cheng
6 min read

Signals aren’t just a new API—they mark the beginning of a new era in Angular.

For a long time, building Angular apps meant following a lot of structure: you had to define NgModules, rely on Zone.js for change detection, and use class-based components with decorators. It worked, but often felt heavier than it needed to be—especially for smaller projects or modern apps where flexibility and simplicity matter more.

But Angular is changing. The framework is evolving toward a more lightweight, reactive model. Signals are a big part of that change, but they’re not the only one. In this article, we’ll talk about what’s changing in Angular, why it matters, and how it will affect the way you build apps going forward.

The Old Way: Structured, But Heavy

Angular’s original design focused on structure—NgModules, decorators, and a global change detection mechanism using Zone.js. These were useful in large enterprise apps, but introduced overhead in simpler use cases.

For example:

  • You needed to declare every component, pipe, and service in a module.

  • Zone.js tracked all asynchronous behavior and triggered change detection across the entire app.

  • You had to manage change detection manually in performance-sensitive areas using ChangeDetectorRef or markForCheck().

While this approach offered consistency, it often led to boilerplate-heavy code and performance bottlenecks. Other frameworks like Vue or SolidJS started offering more lightweight and reactive approaches, making Angular feel a bit outdated in comparison.

Signals: The Theory Behind the Shift

At the heart of Angular’s transformation are Signals—but they’re not just a shiny new API. They represent a fundamental shift in how Angular handles reactivity, inspired by a concept called fine-grained reactivity. Let’s unpack that in a way that’s clear and intuitive.

Back in the Zone.js days, Angular relied on a kind of “global observer” model. Every time you clicked a button or typed in a field, Angular would react like a nervous neighbor—“Something changed! Better recheck everything just in case!” This approach, known as dirty checking, meant Angular had to re-evaluate every component, even the ones that didn’t care about the change.

Sure, OnPush made things a bit more efficient by narrowing down what needed checking, but you still had to help Angular manually with things like markForCheck()—especially when changes came from outside Angular’s radar. It was supposed to be reactive, but it still needed you to guide it at every turn.

Signals change this mindset completely.

Think of a Signal as a well-trained assistant who knows exactly which part of your app cares about which data. Instead of watching everything and hoping for the best, Signals track real dependencies—only updating what’s actually affected. This is precise reactivity: targeted, efficient, and automatic.

Here’s why that matters in practice and theory:

  • Precision: A Signal knows exactly what depends on it, so Angular updates only what’s needed—nothing more.

  • Predictability: With Zone.js, updates could feel mysterious—“Why did this component re-render?” Signals make the update path crystal clear. What changes, updates. That’s it.

  • Performance: Fewer updates mean faster UIs, especially in data-heavy dashboards or complex forms—places where OnPush strategies used to struggle with edge cases and manual triggers.

But here’s the key idea: Signals aren’t just about optimizing performance. They reflect a broader move toward reactive programming—building apps that respond to change naturally, like a stream flowing downhill. No extra wiring, no manual commands.

Other frameworks like Vue (ref) and SolidJS have already embraced this model, and Angular’s not just catching up—it’s reimagining reactivity in a way that fits its ecosystem. Signals are Angular’s answer to making reactivity both elegant and explicit.

Beyond Signals: Angular’s New Ecosystem

Signals might be the headline feature, but they’re part of a much bigger story. Angular is rethinking how developers build apps—from setup to syntax—making the experience faster, lighter, and more intuitive.

Here’s what’s changing:

  • Standalone Components: No more NgModules. You can now build a component that imports what it needs and runs independently. It’s like packing a smart carry-on instead of hauling around a full suitcase. Simpler, cleaner, and more focused.

  • New Template Syntax: Angular now supports @if and @for—template syntax that feels like JavaScript. Instead of <ngIf> or <ngFor>, your templates read like straightforward logic. Less boilerplate, more clarity.

  • Zoneless Angular: With Signals and improved reactivity, Angular no longer depends on Zone.js. This means faster change detection and fewer surprises, especially in complex UIs.

Let’s say you’re building a dashboard—a live sales tracker, for example. In the old Angular, you’d need NgModules to wire things up, Zone.js to watch for changes, and OnPush with markForCheck() to keep it fast. Now? You create a standalone component, wire it up with Signals, and skip Zone.js altogether. The UI updates automatically when data changes—no manual wiring needed.

These changes aren’t just about syntax—they reflect a shift in how Angular is used. It’s becoming simpler, more flexible, and better suited for both quick prototypes and complex applications.Angular is becoming simpler and more approachable, but still retains the robustness needed for large-scale applications.

Signal Components: A Peek at the Future

One of the most exciting developments in Angular’s evolution is Signal Components—a next-gen component type that relies entirely on Signals for reactivity, no need for Zone.js anymore.

Here’s what Signal Components promise:

  • Precise Reactivity: They respond only to changes in Signals or component inputs—no more global change detection.

  • Optimized Rendering: The UI updates exactly where it needs to, avoiding unnecessary re-renders.

  • Fine-Grained Control: You decide when and what to render. Want a chart to redraw only when data changes? Now you can.

Imagine that sales dashboard again. With Signal Components, you could track total revenue in a Signal, update just that number when it changes, and leave everything else—like filters or sidebars—untouched. This makes rendering faster, more focused, and easier to integrate with third-party libraries (like charting tools or maps).

In theory, this pushes Angular’s rendering model closer to modern reactive frameworks—without sacrificing structure, tooling, or scalability. It’s Angular, just sharper and more in your control.

The Web’s Moving, and Angular’s With It

This shift isn’t just Angular playing catch-up—it’s part of a broader movement. The web is heading toward precise reactivity, and frameworks like Vue (with ref) and SolidJS (with Signals) have already embraced this model. Even TC39, the committee behind JavaScript standards, is proposing Signals as a language feature.

By embracing Signals and zoneless rendering, Angular is preparing for a world where apps must be faster, more interoperable, and easier to reason about. Adopting Signals now doesn’t just improve performance—It gets you ready for what’s next: inputs driven by signals,, smarter component boundaries, and new rendering patterns that fit the modern web.


What’s Next

Now that we’ve seen why Angular is evolving, it’s time to get practical. In the next article, we’ll dive into how to use Signals in real Angular apps: from reactive state management and UI updates to replacing boilerplate like @Input() / @Output(). You’ll see firsthand how Signals can make your code cleaner, more declarative, and blazingly fast.

Angular’s changing. If you’re still writing code the old way, now’s the perfect time to try something new.

We’ll dive deeper in the next post.

0
Subscribe to my newsletter

Read articles from Claire Cheng directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Claire Cheng
Claire Cheng