Область действия Angularjs. $apply в директиве прослушивателя прокрутки

Я использую следующую директиву, чтобы узнать, прокрутил ли пользователь нижнюю часть страницы - 150px и установить переменную области видимости, которая прослушивается, и загружается следующая страница. Это работает нормально.

Меня беспокоит то, что scope.$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;

            });
        }
    };
});

person user3638565    schedule 23.05.2014    source источник


Ответы (1)


Он в таком состоянии, что я не думаю, что с ним что-то не так. Для повышения производительности проверьте также, если scope.requestPage === false, поскольку нет необходимости менять его на true, если это уже так. Было бы неплохо обрабатывать условия в отдельном методе, чтобы привести код в порядок. Кстати заметил, что часы на прокрутке очень затратны по ресурсам, предлагаю отключить для мобильных устройств.

person Alex C    schedule 23.05.2014
comment
У меня могут быть проверки вокруг этого, но есть случаи, когда apply() вызывается несколько раз. Это плохая практика? Кроме того, как я буду загружать больше страниц, когда прокрутка находится внизу, если я отключу ее для мобильных устройств? - person user3638565; 23.05.2014