Почему нельзя использовать var вместо ngFor?

Насколько я знаю, мы используем var а также let для объявлений переменных в javascript, единственная разница в том, что var получает доступ к текущей функции, в то время как let получает доступ к текущему блоку. Так что должно работать, если я использую var вместо let в любом месте. Но в приведенном ниже коде...

<li *ngFor="let fruit of fruits">
   {{ fruit}}
</li>

... если я использую var это дает ошибку.

<li *ngFor="var fruit of fruits">
   {{ fruit}}
</li>

Ошибка: Uncaught (в обещании): Ошибка: Ошибки синтаксического анализа шаблона: Ошибка синтаксического анализатора: неожиданный токен var в столбце 1 в [var fruit of fruits] в ng:///AppModule/AppComponent.html@4:4 ("("

Может кто-нибудь сказать мне, почему это происходит?

2 ответа

Выражение, которое вы вводите здесь, на самом деле не javascript (или машинопись), а угловое выражение.

Есть и другие вещи, которые вы можете здесь сделать, которые невозможны в JS или TS, например, использование pipe (*ngFor="contacts | async").

Под капотом это просто синтаксический сахар для чего-то вроде этого:

 <ng-template ngFor let-contact [ngForOf]="contacts | async">

Смотрите https://toddmotto.com/angular-ngfor-template-element

Добавление некоторых деталей к предыдущему ответу. Я получил некоторое объяснение использования let с *ngFor в угловой документации

Ссылка https://angular.io/guide/template-syntax

Текст, присвоенный *ngFor, является инструкцией, которая управляет процессом повторителя.

*ngFor microsyntax Строка, присвоенная *ngFor, не является выражением шаблона. Это микросинтаксис - небольшой собственный язык, который интерпретирует Angular. Строка "пусть герой героев" означает:

Возьмите каждого героя в массиве heroes, сохраните его в локальной переменной looping и сделайте его доступным для шаблонного HTML для каждой итерации.

Angular переводит эту инструкцию в элемент host вокруг, а затем многократно использует этот шаблон для создания нового набора элементов и привязок для каждого героя в списке.

Ключевое слово let перед hero создает переменную ввода шаблона с именем hero. Директива ngFor выполняет итерацию по массиву heroes, возвращаемому свойством heroes родительского компонента, и устанавливает hero для текущего элемента из массива во время каждой итерации.

Другие вопросы по тегам