gpt4 book ai didi

angular - 什么时候使用 Ngzone.run()?

转载 作者:行者123 更新时间:2023-12-03 15:03:16 27 4
gpt4 key购买 nike

我的 angular 项目中有一个错误,最终通过将我的代码包装到

this.zone.run(() => {/* my code here */});

this 所述回答。

我之前的理解 zone是 angular 无法检测到异步所做的更改 callbacks第三方库,因为“它们不在 angular 的 zone 中”。如果我点击 button , 被触发的事件不是浏览器原生的 click事件但自定义(已修补) click由 angular 创建的事件 handler运行在 zone因此 angular 知道其回调处理程序所做的更改。

但是我无法通过运行 router.navigate() 来理解在第三方回调中创建此问题(如 this github 问题所示)。不是 Router service Angular 本身?为什么它不自动通知 angular 的 zone在第三方调用时 callback ?

我使用 router.navigate 遇到了这个问题在 NGXS 的 state reducer 中。

我的问题是:

有人能解释一下我什么时候需要将我的代码包装在 NgZone 中吗? ?

调试了几个小时,发现我的代码不可用 zone上下文令人厌烦。

最佳答案

ngZone.runOutsideAngular() - 在 Angular 区域之外运行代码。

  • 当某个事件被触发时,它会告诉 angular 检测变化。
  • 如果您使用 mouseUp() 或 mouseDown() 事件,那么在每次更改时它都会告诉 angular 检测更改。
  • 如果我们不希望这些更改在 angular 运行时发生(这会降低应用程序的性能),我们可以在 angular 区域之外运行它。
  • 与此相反,如果我们非常想获得每一个更新,那么我们可以使用 ngZone.run()。意味着它将正常运行更改检测。

  • Angular 本身在幕后使用 ngZone 来检测变化

    所以,如果我们已经离开了 Angular 区域,那么我们使用 ngZone.run() 回来。

    关于angular - 什么时候使用 Ngzone.run()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51455545/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com