Javascript 为什么异步队列在观察者之前处理?
在我基于AngularJS的应用程序中,元素a的可见性导致元素B的宽度变大或变小,这仅仅是因为元素CSS样式的设置方式。元素A的可见性是通过使用ng show=showRail绑定到作用域上的布尔值来切换的。由于我不需要在这里讨论的原因,当切换元素A的可见性时,我需要获取元素B的新宽度。如果我使用$timeout来计算元素B的宽度,我会得到一个准确的读数,但是下一帧太晚了,并且由于必须进行某些渲染而导致闪烁。我知道$evalAsync最适合在DOM更新之后但在浏览器呈现之前执行某些逻辑。因此,在我切换showRail布尔值的处理程序上,我运行的是一个作用域。$evalAsync,但它似乎太早了,元素B仍然没有收到它的新宽度Javascript 为什么异步队列在观察者之前处理?,javascript,angularjs,Javascript,Angularjs,在我基于AngularJS的应用程序中,元素a的可见性导致元素B的宽度变大或变小,这仅仅是因为元素CSS样式的设置方式。元素A的可见性是通过使用ng show=showRail绑定到作用域上的布尔值来切换的。由于我不需要在这里讨论的原因,当切换元素A的可见性时,我需要获取元素B的新宽度。如果我使用$timeout来计算元素B的宽度,我会得到一个准确的读数,但是下一帧太晚了,并且由于必须进行某些渲染而导致闪烁。我知道$evalAsync最适合在DOM更新之后但在浏览器呈现之前执行某些逻辑。因此,在
我搜索了Angular的$digest方法,发现。在我看来,这似乎是倒退,并且似乎解释了为什么在我尝试检索元素B的新宽度之前,元素A的可见性没有改变。我希望有人能解释为什么会这样,也许这会引导我找到解决我具体问题的方法。谢谢。看看setImmediate:
这几乎是为这种事情量身定做的。Angular的内核中没有任何东西可以让你控制这些操作的执行顺序,而为什么的答案不能帮助你解决问题。但是setImmediate可以帮助您避免闪烁,如果它有效的话,它可能是一个5分钟的解决方案…即使它是私有的,但是$$postDigest是您想要的吗?谢谢您的建议。我最终选择了这条路线来解决我的具体问题。