Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Взаимодействие контроллеров друг с другом (https://javascript.ru/forum/angular/41551-vzaimodejjstvie-kontrollerov-drug-s-drugom.html)

nerv_ 03.10.2013 20:40

Цитата:

Сообщение от Shitbox2
Тут сам бог велел отсылать события в глобальный $rootScope

Цитата:

Сообщение от nerv_
Т.о., если я каждое значение скролла отправляю через скоп, я пересчитываю все приложение много-много раз.

Цитата:

Сообщение от Shitbox2
А, вообще, в Ангуляр не мешало бы добавить директиву для скроллинга для навешивания на window, textarea и т.п.

примерно так
.directive( 'ngScroll', [ '$timeout', '$document', function( $timeout, $document ) {
    return {
        link: function( scope, element ) {
            var timer = { cancel: angular.noop };
            element = element[ 0 ].tagName === 'HTML' ? $document : element;

            element.bind( 'scroll', function() {
                var elem = element[ 0 ].documentElement ? element[ 0 ].documentElement : element[ 0 ];
                $timeout.cancel( timer );

                timer = $timeout(function() {
                    scope.$emit( 'event:name', {
                        scrollTop: element.scrollTop(),
                        scrollLeft: element.scrollLeft(),
                        scrollHeight: elem.scrollHeight,
                        scrollWidth: elem.scrollWidth,
                        clientHeight: elem.clientHeight,
                        clientWidth: elem.clientWidth
                    });
                }, 200 );
            });
        }
    };
}]);

Shitbox2 06.10.2013 04:14

Наверное, лучше слать значения хотя бы раз в 50 мс) А, вообще, время должно подстраиваться под скорость прокрутки: если большая, то чаще.

Всё недоумеваю по поводу этой штуки: cancel(promise) в $timeout, может быть мне кто-нибудь объяснит как обещание может остановить само себя? Обещание специально делают так, чтобы оно не содержало методов деферред-объекта, а они, по сути, сломали паттерн...

nerv_ 06.10.2013 14:31

Цитата:

Сообщение от Shitbox2
Наверное, лучше слать значения хотя бы раз в 50 мс)

Я не стал заморачиваться, и налепил все в одну на скорую руку. Только у меня она называется ng-lasy-load.
На мой взгляд правильней разнести на 2 директивы, или директиву и сервис. Первая - ng-scroll - просто висит на элементе и шлет события без фильтрации; вторая зависит от первой (required), фильтрует события полученные от первой (если надо) и вычисляет значения прокрутки (в моем случае).

Цитата:

Сообщение от Shitbox2
А, вообще, время должно подстраиваться под скорость прокрутки: если большая, то чаще.

покажи пример :)

Цитата:

Сообщение от Shitbox2
Всё недоумеваю по поводу этой штуки: cancel(promise) в $timeout, может быть мне кто-нибудь объяснит как обещание может остановить само себя? Обещание специально делают так, чтобы оно не содержало методов деферред-объекта, а они, по сути, сломали паттерн...

как бы сделал ты?


Часовой пояс GMT +3, время: 13:57.