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

Ram*_*ran 48 typescript ngfor angular

根据我的理解,两者都在做同样的功能.但,


我的理解是否正确?或者你能否分享更多差异(细节)ngForngForOf

sno*_*ete 61

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

如果您检查源代码,您将看到NgForOf指令具有其选择器:[ngFor][ngForOf]这意味着两个属性都需要存在于元素上,以便指令"激活".

当您使用时*ngFor,Angular编译器将该语法去糖化为其在元素上具有两个属性的cannonical形式.

所以,

  <div *ngFor="let item of items"></div>
Run Code Online (Sandbox Code Playgroud)

desugars:

 <template [ngFor]="let item of items">
     <div></div>
 </template>
Run Code Online (Sandbox Code Playgroud)

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

 <template ngFor let-item="$implicit" [ngForOf]="items">
   <div>...</div>
 </template>
Run Code Online (Sandbox Code Playgroud)

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

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

您可以查看Angular microsyntax指南以了解更多信息.


dev*_*l69 5

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

你可以用它ngFor作为速记

<li *ngFor="let item of items">{{item.name}}</li>
Run Code Online (Sandbox Code Playgroud)

或者作为速记版本

<template ngFor let-item="$implicit" [ngForOf]="items">
  {{item.name}}
</template>
Run Code Online (Sandbox Code Playgroud)

  • 假设你的`items`集合不是一个简单的集合,而是一个尚未可用的集合,只有在一些异步调用之后才可用.所以你不会有`items`但只有一个Observable或Promise(我们称之为futureItems).在这种情况下,你想使用async管道`let item(futureItems | async)`这是不可能的.但你可以使用`[ngForOf] ="futureItems | async"`的longhand版本 (3认同)

Ram*_*ran 5

在我看来,我从 angular 文档中得到了什么,

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

因为两个班级的细节几乎没有什么不同

  • ngFor类类型是any类型

  • 但是ngForOf类类型是通用的 ngForOf : NgIterable<T>


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

  • 有趣的。但是,由于它们是在模板中使用的,因此这在实践中比在其他情况下更重要。也就是说,Angular API 的数量,包括那些不用于模板使用的 API,例如“FormBuilder”,它们没有经过类型检查,令人不安。 (2认同)