我有一个一般的 Angular 问题:
为什么 Angularasync
管道使用cdr.markForCheck()
而不是cdr.detectChanges()
?
我看到这两种“风格”有两个主要区别:
markForCheck()
标记要检查到根组件的路径 -要更新的内容markForCheck()
让变化检测发生在当前或下一个周期 -定时
我的想法或问题:
为什么我们需要检查到根的整个路径(在
async
管道中)?为什么不只是当前组件?(detectChanges()
) - 这与要更新的内容有关为什么只标记(用于当前/下一个周期 - 在
markForCheck()
使用 ngZone 时)?为什么不立即检测变化?(detectChanges()
) 这与时间有关如果没有 ngZone 异步触发器/没有异步操作怎么办?那么视图更新不会发生?
如果我们将
async
管道改为使用会发生什么detectChanges()
?
异步管道:
private _updateLatestValue(async: any, value: Object): void {
if (async === this._obj) {
this._latestValue = value;
this._ref.markForCheck();
}
}
编辑:
当我在文档中多次阅读时,请不要解释每种方法的作用,从async
角度来看,我无法理解。我要知道的重要部分是为什么要更新什么和时间。