angular 4 *ngFor 额外的循环是不必要的吗?
angular 4 *ngFor extra cycles unnecessary?
这个笨蛋怎么了,从 5 开始计数?
http://plnkr.co/edit/n0qIlzG8TN1GXjtoFA8y?p=preview
<div *ngFor="let joke of jokes">
<p>{{inc()}} - {{joke}}</p>
</div>
尝试更改此行:
<p>{{inc()}} - {{joke}}</p>
像这样:
<p>{{jokes.indexOf(joke)}} - {{joke}}</p>
这样你总能得到数组中项的编号,提高可读性,甚至可以节省一些代码行。
您的代码运行不佳,因为每次触发 变更检测周期 时都会调用模板中的 {{ inc() }}
。 IE。它将被调用的次数超过 jokes
字段中的项目数。
相反,您应该依赖 Angular 提供的 index
变量(正如其他受访者所建议的那样)。
这是 ngFor directive 官方文档的 link。
此外,如果您真的想知道为什么您的原始代码没有按预期工作,请阅读change detection in Angular。
这是因为 angular 中的变化检测是如何工作的。首先,在开发过程中,每次更改检测都是 运行 两次。
要更改此设置:
import { enableProdMode } from '@angular/core';
enableProdMode()
platformBrowserDynamic().bootstrapModule(AppModule)
然后为了使您的代码按预期工作,将 changedetectionstrategy 更改为 OnPush
@Component({
selector: 'joke-list',
template: `
<div *ngFor="let joke of jokes">
<p>{{inc()}} - {{joke}}</p>
</div>`,
changeDetection: ChangeDetectionStrategy.OnPush
})
Plunkr 的解决方案:Plunkr
这个笨蛋怎么了,从 5 开始计数?
http://plnkr.co/edit/n0qIlzG8TN1GXjtoFA8y?p=preview
<div *ngFor="let joke of jokes">
<p>{{inc()}} - {{joke}}</p>
</div>
尝试更改此行:
<p>{{inc()}} - {{joke}}</p>
像这样:
<p>{{jokes.indexOf(joke)}} - {{joke}}</p>
这样你总能得到数组中项的编号,提高可读性,甚至可以节省一些代码行。
您的代码运行不佳,因为每次触发 变更检测周期 时都会调用模板中的 {{ inc() }}
。 IE。它将被调用的次数超过 jokes
字段中的项目数。
相反,您应该依赖 Angular 提供的 index
变量(正如其他受访者所建议的那样)。
这是 ngFor directive 官方文档的 link。
此外,如果您真的想知道为什么您的原始代码没有按预期工作,请阅读change detection in Angular。
这是因为 angular 中的变化检测是如何工作的。首先,在开发过程中,每次更改检测都是 运行 两次。
要更改此设置:
import { enableProdMode } from '@angular/core';
enableProdMode()
platformBrowserDynamic().bootstrapModule(AppModule)
然后为了使您的代码按预期工作,将 changedetectionstrategy 更改为 OnPush
@Component({
selector: 'joke-list',
template: `
<div *ngFor="let joke of jokes">
<p>{{inc()}} - {{joke}}</p>
</div>`,
changeDetection: ChangeDetectionStrategy.OnPush
})
Plunkr 的解决方案:Plunkr