为什么在观察者之前处理asyncQueue ?
Why is the asyncQueue processed before watchers?
在我基于angularjs的应用程序中,元素a的可见性导致元素B的宽度变大或变小(只是由于元素CSS样式的设置)。通过使用ng-show="showRail"
绑定到作用域上的布尔值来切换元素A的可见性。由于某些原因,我不需要在这里详细说明,当元素A的可见性被切换时,我需要得到元素B的新宽度。如果我使用$timeout
来评估元素B的宽度,我得到一个准确的读数,但它太迟了(下一帧),并导致闪烁,由于一些渲染,必须做的结果。我明白,$evalAsync
的目的是最好的执行一些逻辑后,DOM已更新,但在浏览器已经呈现。因此,在处理程序中,我正在切换showRail
布尔值,我正在运行scope.$evalAsync
,但似乎还为时过早,元素B仍然没有收到它的新宽度。
我搜索了Angular的$digest方法,发现asyncQueue是在观察者之前处理的。这对我来说似乎是向后的,似乎解释了为什么元素A的可见性在我试图检索元素B的新宽度之前没有改变。我希望有人能解释为什么会这样,也许它会引导我解决我的具体问题。谢谢。
看一下seimmediate:
https://github.com/YuzuJS/setImmediate它几乎是为这种事情量身定做的。在Angular的核心中,没有任何东西可以让你控制这些操作的执行顺序,而"为什么"的答案也不会帮助你解决问题。但是setimate可以帮助你避免闪烁,如果它有效的话,可能是一个5分钟的解决方案…
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 提示使用服务器端事件处理程序激活JavaScript
- 如果用户由于第二个处理程序中的对话框而停留在页面上,则跳过加载前处理程序
- React是装载前处理空对象的最佳方式
- JQuery事件处理程序在事件发生前激发
- AngularJS-在应用程序启动前处理路由
- 为什么在观察者之前处理asyncQueue ?
- EmberJS返回模型前的处理
- 是否有任何方法来处理浏览器/选项卡关闭前卸载或onbeforeunload或卸载
- 在插入前处理HTML字符串
- 正则表达式,用于不处理点后面的数字的正向前看千位分隔符
- window.onPopState()事件处理程序知道导航方向吗?(前、后)
- 浏览器在执行“卸载”前发送http请求.处理程序
- 动态添加的事件处理程序禁用 JavaScript 中的前一个
- 处理ajax请求的流控制(即只在前一个请求完成后处理下一个请求)