我在Angular 2 const
声明中运行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
无效的唯一原因是切片应用于元素,而不是列表(这很奇怪吗?)。
然而,尝试使用const。
迭代Foo.list
时会产生乐趣
<li *ngFor="const element of foo.list"> ... </li>
^ unexpected token
<li *ngFor="let element of foo.list"><!-- completely fine --></li>
我们什么时候应该使用const
呢?我们为什么要在这些情况下使用let
?