Angularjs范围。$ apply在滚动侦听器的指令中

时间:2014-05-23 15:33:06

标签: javascript angularjs angularjs-directive angularjs-scope

我正在使用以下指令来确定用户是否已滚动到页面底部 - 150px并设置正在侦听的范围变量并加载以下页面。它工作正常。

我担心的是范围。$ apply()被多次调用。我需要调用$ apply()来使指令工作,但我不确定多次调用它会导致问题。

有什么想法?

谢谢。

myMod.directive('scrollDetection', 

function () {

    return {
        restrict: 'AE',
        link: function postLink(scope, element, attrs) {

            var last_scroll_top = 0;

            element.bind("scroll", function() {

                var scroll_top = this.scrollTop,
                    scroll_height = this.scrollHeight,
                    height = this.offsetHeight,
                    offset = 150;

                    if (scroll_top > last_scroll_top) {

                        if ((scroll_top + height + offset) >= scroll_height) {

                            scope.requestPage = true;
                            scope.$apply();

                        }

                    } 

                last_scroll_top = scroll_top;

            });
        }
    };
});

1 个答案:

答案 0 :(得分:0)

这是一个条件,所以我不认为它有问题。为了提高性能,还要检查是否scope.requestPage === false,因为如果情况已经如此,则无需将其更改为true。在单独的方法中处理条件以整理代码可能会很好。顺便说一下,我注意到滚动手表在资源方面非常昂贵,我建议在移动设备上禁用它。