Я работал с неожиданным поведением модификатора const
в выражении Angular 2 ngFor
.
Предполагая, что у меня есть следующий базовый код:
interface Foo {
name: string;
list: string[];
}
@Component({ ... })
class FooComponent() {
@Input foo: Foo;
@Input list: string[];
}
Использование const
в следующем шаблоне будет вполне приемлемо во время компиляции и во время выполнения.
<li *ngFor="const element of list"> ... </li>
Теперь, если мы используем SlicePipe, const
больше не работает, и компилятор Typescript вызывает ошибку на токене |
.
<li *ngFor="const element of list | slice:0:3"> ... </li>
^ unexpected token
<li *ngFor="let element of list | slice:0:3"><!-- completely fine --></li>
Я ожидал, что труба будет применена к списку, и единственная причина, по которой я могу найти const
недействительной, заключается в том, что срез применяется к элементу, а не к списку (что странно, нет?).
Однако самое интересное было при попытке перебрать Foo.list
с помощью const.
<li *ngFor="const element of foo.list"> ... </li>
^ unexpected token
<li *ngFor="let element of foo.list"><!-- completely fine --></li>
Когда мы должны использовать const
тогда? Почему мы должны использовать let
в этих ситуациях?