htmlangulartypescriptangular17angular18

How to use index in @for in html angular 18


How can I define the index variable in @for in Angular 17

const users = [
    { id: 1, name: 'Ali' },
    { id: 2, name: 'reza' },
    { id: 3, name: 'jack' },
  ];

<ul>
  @for (user of users; track user.id; let i = index) {
  <li>{{ user.name + i }}</li>
  } @empty {
  <span>Empty list of users</span>
  }
</ul>

index is not known as we had in *ngFor and got Unknown "let" parameter variable "index" in Angular17 @for

But the following is working:

<ul>
  <li *ngFor="let user of users; let i = index">{{ user.name + i }}</li>
</ul>

Solution

  • Just $ was missing, it should be $index rather than index. Also there are some other contextual variables rather than $index REF:

    Variable Meaning
    $count Number of items in a collection iterated over
    $index Index of the current row
    $first Whether the current row is the first row
    $last Whether the current row is the last row
    $even Whether the current row index is even
    $odd Whether the current row index is odd

    and the usage would be:

    @for (item of items; track item.id; let idx = $index, e = $even) {
      Item #{{ idx }}: {{ item.name }}
    }
    

    We can also utilize our existing template and execute this command to migrate to control-flow.

    ng g @angular/core:control-flow