我正在研究Angular 2变化检测,我遇到了一些麻烦,或者至少我需要一些解释。
让我们从AppRef(以及来自Througtram博客)获得以下简化代码:
class ApplicationRef {
changeDetectorRefs:ChangeDetectorRef[] = [];
constructor(private zone: NgZone) {
this.zone.onTurnDone
.subscribe(() => this.zone.run(() => this.tick());
}
tick() {
this.changeDetectorRefs
.forEach((detector) => detector.detectChanges());
}
}
我们可以假设组件中有一个changeDetector。 我也假设在一个有角度的2应用程序中只使用了一个Zone.js fork。
从现在开始,让我们获取detectChanges的代码实现,其中有一个比较,如(简化):
detectChanges(){
//...
if(this.previousValue !== newValue){
this.previousValue = newValue
}
}
从那时起,知道只有一个Zone.js fork会触发所有事件,然后启动一个changeDetection循环,这是否意味着所有组件树中的所有检测器都会被这种比较所包含?我的意思是,如果我有1000个组件,我会有1000次调用来检测更改吗?
感谢您的帮助
答案 0 :(得分:2)
基本上是的,Angular在每个变化检测周期中从上到下比较每个绑定。
这就是为什么$lastactivity = Activity::where('text','LIKE','%Affiliate ['.$data->affiliate_name.']%')->get();
允许在没有为此组件更改输入属性时跳过检查组件(及其子/后代组件和指令)的原因。