В чем разница между [ngFor] и [ngForOf] в angular2?
как я понимаю,оба делают то же самое функции. Но,
ngFor
будет работать как коллекции?ngForOf
будет работать как дженериков?
правильно ли мое понимание? или Не могли бы вы поделиться больше разницы (подробнее) о
ngFor
иngForOf
?
5 ответов
ngFor
и ngForOf
это не две разные вещи - они на самом деле являются селекторами директивы NgForOf.
при проверке источник, вы увидите, что директива NgForOf имеет в качестве селектора:[ngFor][ngForOf]
, что означает, что оба атрибута должны присутствовать на элементе для директивы, чтобы "активировать", так сказать.
при использовании *ngFor
, угловой компилятор де-сахаров, что синтаксис в его канонической форме, которая имеет оба атрибута на элемент.
и
<div *ngFor="let item of items"></div>
desugars на:
<template [ngFor]="let item of items">
<div></div>
</template>
это первое де-шугаринг из-за '*'. Следующий de-sugaring из-за микро синтаксиса: "пусть элемент элементов". Угловой компилятор де-сахара, что:
<template ngFor let-item="$implicit" [ngForOf]="items">
<div>...</div>
</template>
(где вы можете думать о $implicit как о внутренней переменной, которую директива использует для ссылки на текущий элемент в итерации).
в канонической форме атрибут ngFor является просто маркер, в то время как атрибут ngForOf фактически является входом в директиву, которая указывает на список вещей, которые вы хотите повторить.
вы можете проверить Угловое микросинтаксис руководство чтобы узнать больше.
ngFor
является структурной директивой угловой, которая заменяет ng-repeat
атрибут AngularJS
можно использовать ngFor
как стенография
<li *ngFor="let item of items">{{item.name}}</li>
или как версия longhand
<template ngFor let-item="$implicit" [ngForOf]="items">
{{item.name}}
</template>
NgFor можете перебирать массив, но в ngContainer, ngContent мы не можем итерировать ngFor прямо так на переборе мы можно использовать [ngForOf]. Здесь I-переменная, рейтинги-это массив.
Ex.
<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>
по-моему, что я получил из углового документа,
-
[ngFor]
неtype safe
-
[NgForOf]
иtype safe
потому что обе детали класса мало чем отличаются
ngFor
типаany
типно
ngForOf
деталь классаngForOf : NgIterable<T>
ngForOf
похоже на дженерики о чем я уже упоминал в своем вопросе.
явная версия
-
(<template ngFor ...>)
позволяет применять директиву к нескольким элементам одновременно
неявные версии
- только обертывает элемент, где он применяется