Quelle est la différence entre [ngFor] et [ngForOf] dans angular2?

Selon ma compréhension, les Deux font la même fonctions. Mais,


Est-ce que ma compréhension est correcte? ou Pourriez-vous partager plus de différences (détails) sur ngFor et ngForOf?

39
demandé sur Ramesh Rajendran 2017-04-13 12:47:34

5 réponses

ngFor et ngForOf ne sont pas deux choses distinctes - ils sont en fait les sélecteurs de la directive NgForOf.

Si vous examinez la source , vous verrez que la directive NgForOf a comme sélecteur: [ngFor][ngForOf], ce qui signifie que les deux attributs doivent être présents sur un élément pour que la directive "active" pour ainsi dire.

Lorsque vous utilisez *ngFor, le compilateur angulaire décompose cette syntaxe dans sa forme cannonique qui a les deux attributs sur le élément.

Donc,

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

Desugars à:

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

Ce premier dégazage est dû au '*'. Le prochain dégazage est dû à la syntaxe micro: "let item of items". Le compilateur angulaire dés-sucres qui à:

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

(où vous pouvez penser à $implicite comme une variable interne de la directive utilise pour se référer à l'élément courant 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 à la directive qui pointe vers la liste des choses que vous voulez parcourir.

Vous pouvez consulter le Angular microsyntax guide pour en savoir plus.

50
répondu snorkpete 2017-07-19 10:04:26

ngFor est une directive structurelle D'angulaire qui remplace l'attribut ng-repeat de AngularJS

, Vous pouvez utiliser ngFor comme une abréviation

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

Ou comme version à main longue

<template ngFor let-item="$implicit" [ngForOf]="items">
  {{item.name}}
</template>
5
répondu devnull69 2017-04-13 10:06:13

NgFor peut itérer un tableau mais dans ngContainer, ngContent nous ne pouvons pas itérer ngFor directement donc pour itérer nous peut utiliser [ngForOf] . Ici, i est variable, ratings est un tableau.

Ex.

 <ng-template ngFor let-i [ngForOf]="ratings">
                  <option *ngIf="i<=22" [ngValue]="i">{{i}}:00 Hrs.</option>
   </ng-template>

Dans cet exemple, je veux appliquer un ngFor et ngIf simultanément, donc je l'ai utilisé.

L'autre vue est qu'à une normale si nous appliquons ngFor alors au rendu il le convertit en

<template ngFor let-i [ngForOf]="ratings">
   <HTML Element>...</HTML Element>
 </template>
1
répondu rajeev omar 2018-02-16 07:09:08

À mon avis, ce que j'ai obtenu du document angulaire,

  • [ngFor] n'est pas type safe
  • [NgForOf] est type safe

Parce que les deux détails de classe sont peu différents

  • ngFor Classe est de type any de type

  • Mais ngForOf le détail de la classe est ngForOf : NgIterable<T>


ngForOf on dirait des génériques que j'ai déjà mentionnés dans ma question.

1
répondu Ramesh Rajendran 2018-02-19 00:53:44

Version explicite

  • (<template ngFor ...>) permet d'appliquer la directive à plusieurs éléments à la fois

Version implicite

  • enveloppe uniquement l'élément où il est appliqué
0
répondu 2017-04-26 00:21:29