Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between [ngFor] and [ngForOf] in angular2?

As per my understanding, Both are doing the same functions. But,

  • ngFor would be works like as collections?.

  • ngForOf would be works like as generics?.


Is my understanding is correct? or Could you please share more difference's(details) about ngFor and ngForOf?

like image 943
Ramesh Rajendran Avatar asked Apr 13 '17 09:04

Ramesh Rajendran


People also ask

What is ngForOf?

Descriptionlink. The ngForOf directive is generally used in the shorthand form *ngFor . In this form, the template to be rendered for each iteration is the content of an anchor element containing the directive. The following example shows the shorthand syntax with some options, contained in an <li> element.

Can we use ngFor in ng template?

When we use *ngFor , we're telling Angular to essentially treat the element the * is bound to as a template. Angular's <ng-template> element is not a true Web Component (unlike <template> ).

What is ngFor and NgIf?

NgIf conditionally displays items by adding or removing them from the DOM depending on the condition. NgFor renders a list of items from iterable objects.

How do you use ngFor?

To Use ngFor directive, you have to create a block of HTML elements, which can display a single item of the items collection. After that you can use the ngFor directive to tell angular to repeat that block of HTML elements for each item in the list.


2 Answers

ngFor and ngForOf are not two distinct things - they are actually the selectors of the NgForOf directive.

If you examine the source, you'll see that the NgForOf directive has as its selector: [ngFor][ngForOf] , meaning that both attributes need to be present on an element for the directive to 'activate' so to speak.

When you use *ngFor, the Angular compiler de-sugars that syntax into its cannonical form which has both attributes on the element.

So,

  <div *ngFor="let item of items"></div> 

desugars to:

 <template [ngFor]="let item of items">      <div></div>  </template> 

This first de-sugaring is due to the '*'. The next de-sugaring is because of the micro syntax: "let item of items". The Angular compiler de-sugars that to:

 <template ngFor let-item="$implicit" [ngForOf]="items">    <div>...</div>  </template> 

(where you can think of $implicit as an internal variable that the directive uses to refer to the current item in the iteration).

In its canonical form, the ngFor attribute is just a marker, while the ngForOf attribute is actually an input to the directive that points to the the list of things you want to iterate over.

You can check out the Angular microsyntax guide to learn more.

like image 159
snorkpete Avatar answered Oct 04 '22 19:10

snorkpete


ngFor is a structural directive of Angular which replaces the ng-repeat attribute of AngularJS

You can use ngFor as a shorthand

<li *ngFor="let item of items">{{item.name}}</li> 

or as the longhand version

<template ngFor let-item="$implicit" [ngForOf]="items">   {{item.name}} </template> 
like image 24
devnull69 Avatar answered Oct 04 '22 19:10

devnull69