gpt4 book ai didi

javascript - 为什么 asyncQueue 在观察者之前被处理?

转载 作者:行者123 更新时间:2023-11-28 08:01:34 24 4
gpt4 key购买 nike

我在基于 AngularJS 的应用程序中遇到了一种情况,元素 A 的可见性导致元素 B 的宽度更大或更小(只是由于元素 CSS 样式的设置方式所致)。元素 A 的可见性可通过使用 ng-show="showRail"绑定(bind)到范围上的 bool 值来切换。由于我不需要进入这里的原因,当元素 A 的可见性切换时,我需要获取元素 B 的新宽度。如果我使用 $timeout 来评估元素 B 的宽度,我会得到准确的读数,但为时已晚(下一帧),并且由于必须完成一些渲染而导致闪烁。据我所知, $evalAsync 最适合在 DOM 更新之后、浏览器渲染之前执行一些逻辑。因此,在我切换 showRail bool 值的处理程序中,我正在运行 scope.$evalAsync 但看起来还为时过早,元素 B 仍未收到新的值宽度。

我搜索了 Angular 的 $digest 方法,发现 asyncQueue is processed 位于 watchers 之前。这对我来说似乎是倒退的,似乎解释了为什么在我尝试检索元素 B 的新宽度之前元素 A 的可见性没有改变。我希望有人能解释为什么会出现这种情况,也许这会引导我找到解决我的具体问题的方法。谢谢。

最佳答案

看一下 setImmediate:

https://github.com/YuzuJS/setImmediate

这几乎就是为这种事情量身定做的。 Angular 的核心中没有任何东西可以让您控制这些操作的执行顺序,并且“为什么”的答案不会帮助您解决问题。但 setImmediate 可以帮助您避免闪烁,如果有效的话,可能是 5 分钟的解决方案......

关于javascript - 为什么 asyncQueue 在观察者之前被处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25330149/

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