Javascript 奇怪的“$evalAsync”行为 摘要
您好,我正在尝试(手动)操作angular应用程序的滚动逻辑,因为angular中没有Javascript 奇怪的“$evalAsync”行为 摘要,javascript,angularjs,Javascript,Angularjs,您好,我正在尝试(手动)操作angular应用程序的滚动逻辑,因为angular中没有onload事件,所以我试图在$interval循环内完成这一点。它工作,但用户界面闪烁,它看起来像滚动第一次去所有的方式向上,然后再向下,使一切看起来很糟糕。我已经开始寻找解决问题的方法,并找到了答案。其中有人说我必须寻找$evalAsync,它能够在UI渲染之前对操作进行排队。它引导我找到以下代码: var restoreScroll = function (scroll) { an
onload
事件,所以我试图在$interval循环内完成这一点。它工作,但用户界面闪烁,它看起来像滚动第一次去所有的方式向上,然后再向下,使一切看起来很糟糕。我已经开始寻找解决问题的方法,并找到了答案。其中有人说我必须寻找$evalAsync
,它能够在UI渲染之前对操作进行排队。它引导我找到以下代码:
var restoreScroll = function (scroll) {
angular.element($window).scrollTop(scroll);
var fn = function () {
debugger;
var value = angular.element($window).scrollTop();
if (value !== scroll) {
angular.element($window).scrollTop(scroll);
$rootScope.$evalAsync(fn);
}
}
$rootScope.$evalAsync(fn);
};
它挂起并显示了我对Angular的$evalAsync
方法的误解
问题:
根据上面的代码,我需要一个方法来尝试设置滚动,直到它成功为止,在它应该停止之后,如何使用$evalAsync
进行设置
提前谢谢你
==================
编辑
我成功地让它工作了,但是我的代码中没有魔鬼($$postDigest),所以下面是:
var restoreScroll = function (scroll) {
angular.element($window).scrollTop(scroll);
var fn = function () {
var value = angular.element($window).scrollTop();
if (value !== scroll) {
angular.element($window).scrollTop(scroll);
$rootScope.$$postDigest(fn);
}
}
$rootScope.$$postDigest(fn);
};
有更好的方法吗?您是否尝试过$viewContentLoaded。更多信息是的,我做了,它发生得比需要的早。不幸的是,$$postDigest对angular是私有的,我们应该避免使用它,相反,$timeout会更好。请看这里:正如问题中提到的,$interval(即$timeout)会导致闪烁。。。