奇怪的`$ evalAsync`行为

时间:2015-06-29 17:23:43

标签: javascript angularjs

摘要

嗨,我正在尝试操纵我的角度应用程序的滚动逻辑(手动),因为在角度中没有onLoaded事件这样的事情,我试图在$ interval循环中完成它。它工作但是UI闪烁,看起来滚动首先一直向上,然后再次向下,使一切看起来很糟糕。我已经开始寻找解决问题的方法,并找到this回答。据说我必须要求$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);
    };

有更好的方法吗?

0 个答案:

没有答案