Return Blog
Angular

Angular 17 Control Flow Explained

Sergio Rojas
Sergio Rojas
3 min read 4 Apr, 2024
Share
Angular 17 Control Flow Explained
Summarize with AI:
Prompt copied! Paste it (Cmd/Ctrl+V) in the chat. Open AI

Today, we are going to dive into some of the most exciting additions to Angular 17: the new control flow directives. Angular continues to evolve, and with version 17, we have even more powerful tools to build dynamic and efficient applications. Let’s explore the new @if, @for, @empty, and @switch directives, comparing them with their predecessors and seeing how they can simplify our code.

@if and @else Conditions

Imagine you want to add a condition to your code, but without any complications. Angular 17 brings us a refreshing and direct way to do just that:

@if (condition) {
  <div>Your content goes here</div>
}

This new way of writing conditions is a breath of fresh air that simplifies onboarding and dramatically improves code readability. It is almost like writing a standard JavaScript function, but with a special twist: that little @ symbol at the beginning makes all the difference.

- What if things get complicated? No problem

But wait, what happens if you need a bit more, like adding an “else” to the equation? Angular 17 has you covered:

If you are getting used to the new syntax, just think about how you would structure an if-else block in JavaScript and simply add an @ in front of the keywords.

@if (day === 'Monday') {
  <div>Free coffee to start the week with high energy</div>
} @else {
  <div>Don't like coffee? We have free tea available</div>
}

Easy and straightforward, right? Here is a quick look at how it used to be done in Angular, so you can appreciate the simplicity of the new approach:

<ng-container *ngIf="day === 'Monday'; else elseBlock">
  <div>Free coffee</div>
</ng-container>
<ng-template #elseBlock>
  <div>Free tea</div>
</ng-template>

@for Loop

The for loops have also been redesigned to make handling lists and data significantly easier:

@for (item of items; track item.id) {
  {{ item.name }}
}

- Utilizing Track

track in Angular helps handle lists efficiently. For static lists, use the item’s index (track $index), whereas for dynamic lists, use a unique property belonging to each item. But be careful: using constantly changing objects as keys can be like cleaning the entire house just because someone left a single mug in the living room.

@empty Block

After using @for, you can append an @empty block right after it. Think of @empty as the backup plan for a party: if it turns out no guests show up, then @empty kicks into action, displaying a message or whatever content you define for those lonely moments.

@for (item of items; track item.name) {
  <li>{{ item.name }}</li>
} @empty {
  <li>No guests available.</li>
}

@switch Block

Imagine the @switch syntax as a game show where your expression is the judge deciding which @case matches its criteria exactly, using a strict rule of perfect equality (===). There are no half-measures here—every decision is final.

@switch (condition) {
  @case (caseA) {
    Case A.
  }
  @case (caseB) {
    Case B.
  }
  @default {
    Default case.
  }
}

Additionally, you don’t need to stop execution with a break or return because @switch automatically stops searching once it finds its perfect match. It is highly efficient and direct in its operation.

And if it doesn’t find its soulmate, and there is no @default block to call, it simply remains silent and renders nothing. Talk about being selective!

Wrapping up

Angular 17 simplifies your life with intuitive directives like @if, @for, @empty, and @switch, making your code cleaner and more efficient. Give these tools a try and revitalize your development process!