Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular io (4) *ngFor first and last

I am trying to tell whether an item in an *ngFor is the first or last element to style a container. Is there a way to do something like this?

<md-expansion-panel *ngFor="let item of items" *ngClass="{ 'first' : item.isFirst }">   <content></content> </md-expansion-panel> 

Thanks for any help offered!

like image 530
Nicholas Fitton Avatar asked Oct 25 '17 10:10

Nicholas Fitton


People also ask

What is * in ngFor Angular?

In *ngFor the * is a shorthand for using the new angular template syntax with a template tag, this is also called structural Directive.It is helpful to know that * is just a shorthand to explicitly defining the data bindings on a template tag.

Which is the correct syntax of ngFor in Angular?

The syntax is *ngFor="let <value> of <collection>" . <value> is a variable name of your choosing, <collection> is a property on your component which holds a collection, usually an array but anything that can be iterated over in a for-of loop.


2 Answers

Inside the ngFor you have access to several variables:

  • index: number: The index of the current item in the iterable.
  • first: boolean: True when the item is the first item in the iterable.
  • last: boolean: True when the item is the last item in the iterable.
  • even: boolean: True when the item has an even index in the iterable.
  • odd: boolean: True when the item has an odd index in the iterable.

So:

<md-expansion-panel *ngFor="let item of items; first as isFirst"     *ngClass="{ 'first' : isFirst }">   <content></content> </md-expansion-panel> 

Documentation at https://angular.io/api/common/NgForOf gives this example:

<li *ngFor="let user of userObservable | async as users; index as i; first as isFirst">    {{i}}/{{users.length}}. {{user}} <span *ngIf="isFirst">default</span> </li> 
like image 121
Duncan Avatar answered Sep 19 '22 21:09

Duncan


This how you can do it :

<md-expansion-panel      *ngFor="let item of items; let first = first; let last = last"      [ngClass]="{ 'first' : first }">     <content></content> </md-expansion-panel> 

NgFor provides several exported values that can be aliased to local variables:

  • index will be set to the current loop iteration for each template context so it start from 0.

  • first will be set to a boolean value indicating whether the item is the first one in the iteration.

  • last will be set to a boolean value indicating whether the item is the last one in the iteration.

  • even will be set to a boolean value indicating whether this item has an even index.

  • odd will be set to a boolean value indicating whether this item has an odd index.

for more information : NgFor-directive 🚀🚀

a complete example

<div     *ngFor="let n of items; let itemsCount = count;let idx = index , let isOdd = odd;let first = first ;let last = last;">     {{n}} ,     {{itemsCount}} ,     {{idx}} ,     odd 👉 {{isOdd}} ,     first 👉 {{first}} ,     last 👉 {{last}} </div> 

demo 🚀

like image 43
Muhammed Albarmavi Avatar answered Sep 20 '22 21:09

Muhammed Albarmavi