Angularjs scope.$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