Javascript 奇怪的“$evalAsync”行为 摘要

Javascript 奇怪的“$evalAsync”行为 摘要,javascript,angularjs,Javascript,Angularjs,您好,我正在尝试(手动)操作angular应用程序的滚动逻辑,因为angular中没有onload事件,所以我试图在$interval循环内完成这一点。它工作,但用户界面闪烁,它看起来像滚动第一次去所有的方式向上,然后再向下,使一切看起来很糟糕。我已经开始寻找解决问题的方法,并找到了答案。其中有人说我必须寻找$evalAsync,它能够在UI渲染之前对操作进行排队。它引导我找到以下代码: var restoreScroll = function (scroll) { an

您好,我正在尝试(手动)操作angular应用程序的滚动逻辑,因为angular中没有
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)会导致闪烁。。。