Angular ngFor在组件上的任何事件上重新绘制,即使在ngFor之外
我的问题与Angular(2)有关,使用Angular.io sample plunkr中的RC1 fork。ngFor模板中的数据绑定功能运行时,就像在ngFor之外的任何事件中发现更改检测为真一样。在我的示例中,单击ngFor外部的按钮 我试过使用和不使用trackBy函数(尽管它的文档目前很差,所以不确定我是否正确使用了它);我不知道如何确保每一个操作都不会导致ngFor的重新绘制,因为这可能会非常昂贵 单击时的日志结果:Angular ngFor在组件上的任何事件上重新绘制,即使在ngFor之外,angular,ngfor,Angular,Ngfor,我的问题与Angular(2)有关,使用Angular.io sample plunkr中的RC1 fork。ngFor模板中的数据绑定功能运行时,就像在ngFor之外的任何事件中发现更改检测为真一样。在我的示例中,单击ngFor外部的按钮 我试过使用和不使用trackBy函数(尽管它的文档目前很差,所以不确定我是否正确使用了它);我不知道如何确保每一个操作都不会导致ngFor的重新绘制,因为这可能会非常昂贵 单击时的日志结果: 钮扣 绘图 绘图 您可以通过查看控制台日志实时查看问题: impo
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<button (click)="clickOustideFunction()" >hi</button>
<h1 *ngFor="let d of data;trackBy:a">
My First Angular 2 App{{drawingForFunction()}}
</h1>`
})
export class AppComponent {
data= [{"a":1}, {"a":2}];
clickOustideFunction(): void {
console.log("button");
}
drawingForFunction(): void {
console.log("drawing");
}
}
从'@angular/core'导入{Component};
@组成部分({
选择器:“我的应用程序”,
模板:`
你好
我的第一个Angular 2应用程序{{drawingForFunction()}}
`
})
导出类AppComponent{
数据=[{a:1},{a:2}];
clickOustideFunction():void{
控制台日志(“按钮”);
}
drawingForFunction():void{
控制台日志(“图纸”);
}
}
默认情况下,在每个事件后都会检查所有模板绑定的更改。通常,NgFor循环将具有像{{data.a}}
这样的绑定,并且每次运行更改检测时都会对这些绑定进行脏检查。如果您有一个函数,比如{{drawingForFunction()}}
,那么每次运行更改检测时都会对这些函数进行评估
Angular只会在看到/检测到更改时修改DOM,因此除非有更改,否则不会重新渲染任何内容。并且仅重新呈现更改的项目(而不是整个视图)
您可能可以使用
OnPush
更改检测策略来减少检查组件更改的频率。这不是我所希望的答案,因为似乎很容易让某些东西运行不好,但我将研究可以通过组件装饰器使用的更改检测策略。非常感谢。有谁能找到一个资源指南来帮助防止落入这个陷阱?