标签: angular-ngzone

如何找到哪个异步操作触发ngZone(导致更改检测)?

更新的堆栈跟踪中的任何更改始终会导致返回globalZoneAwareCallback。您如何找出引发变化的原因?

在调试方面,最好有一个清晰的画面。

debugging angular angular-ngzone

8
推荐指数
1
解决办法
540
查看次数

为什么 Angular 异步管道使用 cdr.markForCheck() 而不是 cdr.detectChanges()?

我有一个一般性的角度问题:

为什么async使用角管cdr.markForCheck()而不是cdr.detectChanges()

我认为这两种“风格”有两个主要区别:

  1. markForCheck()标记要检查的路径直到根组件 -要更新的内容
  2. markForCheck()让变化检测发生在当前或下一个周期 -计时

我的想法或问题:

  1. 为什么我们需要检查根的整个路径(在async管道中)?为什么不只是当前组件?( ) - 这与要更新的内容detectChanges()有关

  2. 为什么只标记(对于当前/下一个周期 - 使用markForCheck()ngZone)?为什么不立即检测变化?( ) 这与时间detectChanges()有关

  3. 如果没有 ngZone 异步触发器/没有异步操作怎么办?那么视图更新不会发生吗?

  4. async如果我们改为使用管道会发生什么detectChanges()


异步管道

  private _updateLatestValue(async: any, value: Object): void {
    if (async === this._obj) {
      this._latestValue = value;
      this._ref.markForCheck();
    }
  }
Run Code Online (Sandbox Code Playgroud)

编辑:

async请不要解释每种方法的作用,因为我在文档中阅读了很多次,并且从角度来看我无法理解。对我来说,重要的是要知道更新内容时间安排的原因。

angular ngzone angular-changedetection angular-ngzone

5
推荐指数
1
解决办法
2032
查看次数