ngFor
et ngForOf
ne sont pas deux choses distinctes : ce sont en fait les sélecteurs de la directive NgForOf.
Si vous examinez le fuente vous verrez que la directive NgForOf a comme sélecteur : [ngFor][ngForOf]
Cela signifie que les deux attributs doivent être présents sur un élément pour que la directive soit "activée", pour ainsi dire.
Lorsque vous utilisez *ngFor
Le compilateur Angular simplifie cette syntaxe en la ramenant à sa forme classique, qui comporte les deux attributs sur l'élément.
Donc,
<div *ngFor="let item of items"></div>
desugar à :
<template [ngFor]="let item of items">
<div></div>
</template>
Ce premier désamorçage est dû au "*". Le désensorcellement suivant est dû à la micro-syntaxe : "let item of items". Le compilateur Angular désensorcelle cela en :
<template ngFor let-item="$implicit" [ngForOf]="items">
<div>...</div>
</template>
(où l'on peut considérer $implicit comme une variable interne que la directive utilise pour se référer à l'élément actuel dans l'itération).
Dans sa forme canonique, l'attribut ngFor n'est qu'un marqueur, tandis que l'attribut ngForOf est en fait une entrée de la directive qui pointe vers la liste des éléments sur lesquels vous souhaitez effectuer une itération.
Vous pouvez consulter le Guide de la microsyntaxe angulaire pour en savoir plus.
4 votes
Bonne question ! Je voulais aussi demander ! En fait, vos liens pour les collections et les génériques sont les mêmes.
1 votes
@Sajeetharan Problème de frappe. Désolé pour cela. J'ai maintenant mis à jour ma question.
5 votes
github.com/angular/angular/commit/
1 votes
@yurzui, bien vu. Il semble donc que la classe était précédemment NgFor et qu'elle a été modifiée lors du passage à angular v4, et l'élément clé est que nous, en tant que communauté, n'étions pas les plus sages. Superbe rétrocompatibilité