gpt4 book ai didi

angular - Angular 变化检测是否发生在服务中?

转载 作者:行者123 更新时间:2023-12-05 06:10:02 24 4
gpt4 key购买 nike

我刚刚学习 Angular 变化检测。我的理解是,只要组件内部发生某些事情,Angular 就会运行变更检测。但是在服务方面呢?

假设一个服务使用 rxJs interval 每秒做一些事情(或什么都不做)。如果我理解正确的话,那是一个异步操作。那么 Angular 是否每秒运行一次更改检测并更新当前 View ?

我看到一些库在这种间隔内使用 ngZone(外部),这是一个错误吗?

最佳答案

编辑:

实际上,我将更改检测事件误认为是重新渲染组件。我做了一些更深入的研究,现在我可以说变化检测也是由服务触发的。它在整个应用程序中触发:

  1. 出现一些浏览器事件(即点击、键入)
  2. setInterval()setTimeout() 被执行
  3. 有一个使用XMLHttpRequest执行的请求

因此,根据您的顾虑,该库的创建者意识到在服务中使用 debounce 会触发变更检测。它不一定与更新模板有关,但它可能会触发它。

抱歉犯了这个错误!

原答案:

不,更改检测不会在服务中发生,因为它们没有任何模板可以重新呈现。如果您想根据某些服务的变化更新组件,您需要将该服务注入(inject)组件并共享该数据,即与 BehaviorSubject

如果您将值推送到您在组件中订阅的行为主题,这将更新该 View ,但当它未订阅时 - 它不会重新呈现。

对于您关于 ngZone 的问题 - 视情况而定。根据 Angular 文档,您可以使用它来提高应用程序的性能,但前提是它与 UI 更改或错误处理无关。

关于angular - Angular 变化检测是否发生在服务中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64574772/

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