angular2中[ngFor]和[ngForOf]有什么区别?

时间:2017-04-13 09:47:35

标签: angular typescript ngfor

根据我的理解,两者都在做相同的功能。但是,

  

我的理解是否正确?要么      您能否分享一下ngForngForOf的更多差异(详细信息)?

5 个答案:

答案 0 :(得分:56)

ngForngForOf不是两个截然不同的东西 - 它们实际上是NgForOf指令的选择器。

如果你检查source,你会看到NgForOf指令有选择器:[ngFor][ngForOf],这意味着两个属性都需要出现在一个元素上,以便指令'激活'可以这么说。

当你使用*ngFor时,Angular编译器会将该语法解析为其元素形式,该元素在元素上具有两个属性。

所以,

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

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

这第一次去糖是由于'*'。下一次去糖是因为微语法:“让项目项目”。 Angular编译器将其解释为:

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

(您可以将$ implicit视为指令用于引用迭代中当前项的内部变量。)

在规范形式中,ngFor属性只是一个标记,而ngForOf属性实际上是指令的输入,指向要迭代的事物列表。

您可以查看Angular microsyntax guide了解详情。

答案 1 :(得分:5)

ngFor是Angular的结构指令,它取代了AngularJS的ng-repeat属性

您可以使用ngFor作为简写

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

或作为简写版

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

答案 2 :(得分:1)

在我看来,我从有角度的文件中得到了什么,

  • [ngFor]不是 type safe
  • [NgForOf] type safe

因为两个课程的细节差别不大

  • ngFor班级类型为any类型

  • 但是ngForOf类的详细信息是 ngForOf : NgIterable<T>

ngForOf看起来像我在问题中已经提到过的泛型。

答案 3 :(得分:1)

NgFor可以迭代一个数组但是在ngContainer,ngContent中我们不能直接迭代ngFor所以对于迭代我们 可以使用[ngForOf]。这里我是变量,评级是一个数组。

实施例。

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

在这个例子中,我想同时应用ngFor和ngIf,所以我使用它。

另一种观点是,如果我们应用ngFor,那么在正常情况下渲染它会将其转换为

<template ngFor let-i [ngForOf]="ratings">
   <HTML Element>...</HTML Element>
 </template>

答案 4 :(得分:0)

明确版本

  • (<template ngFor ...>)允许一次将指令应用于多个元素

隐含版本

  • 仅将元素包裹在应用它的位置