2016-11-08 1 views
0

Angular 1.5.x로 첫 프로젝트를 시작했습니다. 여태까지는 그런대로 잘됐다.Angular JS가 스크롤 이벤트를 발생시키지 않습니다.

그러나 최근에 나는 아주 간단한 것을하고 스크롤 할 때 창 위치/이벤트를 기록하려고 노력했습니다. 지시문, 바인딩 이벤트, jquery와 같은 다양한 접근 방식을 시도했지만 콘솔에 아무것도 기록되지 않는 것으로 보입니다.

일반적으로 원시 자바 스크립트 내가 같은 간단한 일을 할 것이다 : 나는 내 컨트롤러에 이런 식으로 뭔가를 찾기 위해 코드를 업데이트하려고했습니다

window.onscroll = function (e) { 
    console.log(e); 
} 

:

angular.element($window).on('scroll', function (e) { 
    console.log(e); 
}); 

그것은 아무것도하지 않습니다. 클릭 또는 크기 조정으로 이벤트를 변경하면 응답합니다. 그러나 스크롤은 아무 것도하지 않습니다. 정말 실망했습니다.

지시어를 사용해 보았는데 동일한 결과가 나타났습니다. 아무것도.

각도가 스크롤 이벤트를 제거하거나 대체 할 수 있습니다. 나는 분명히할만한 해결책이 있거나, 또 다른 속성이나 접근이 필요하기를 바라고 있습니다.

많은 시간 내 주셔서 감사합니다.

누구나 제공 할 수있는 도움과 조언에 정말로 감사드립니다.

+0

당신이'대신 .on''의 .bind' 사용하여 시도가? – Lifehack

+0

예. 아무것도하지 않는 것처럼 보입니다. –

+0

내가 '클릭'과 같은 다른 것으로 이벤트를 변경하는 경우. 그것은 작동합니다. '스크롤'이 전혀 응답하지 않는 것으로 보입니다. 정말 이상해. –

답변

1

여기를보세요 http://plnkr.co/edit/FL06BgnmOpgVXNecB3mB?p=preview. HTML 페이지를 스크롤하여 콘솔을 열면 일부 출력이 인쇄됩니다. script.js 파일에서 $ window는 의존성 삽입이다.

app.directive("scroll", function ($window) { 
    return function(scope, element, attrs) { 
    angular.element($window).bind("scroll", function(e) { 
     console.log(e); 
     console.log(this.pageYOffset); 
     scope.$apply(); 
    }); 
    }; 
}); 
+0

안녕하세요, @ 지, 나를 도와 주셔서 고마워요. 나는 당신의 예를 시험해 보았습니다. 그러나, 내 애플 리케이션에 그것을 전송할 때 그것은 스크롤 이벤트를 트리거하지 않습니다. 내 코드에는 상충되는 부분이있을뿐입니다. 그러나 나는 무엇이 확실하지 않다. 나는 "스크롤"을 "클릭"으로 전환 할 때 이벤트를 발생 시키지만 스크롤하지는 않는다는 것은 기괴하다는 것을 알게됩니다. –

+0

더 땜질 후에. 나는 마침내 반응하도록했습니다. 요소에 5000px의 하드 코드 된 CSS 높이 값을 지정했으며 이제 이벤트를 로깅합니다. 따라서 각도가 창 높이를 얻지 못하는 것으로 보입니다. 나는 동적 인 템플릿/라우트를 사용하는 것과 관련이 있으며, 페이지 높이가 있기 전에 스크롤 이벤트를 바인딩하고 있다고 생각한다. 나는 이것이 벌레인지 모난일까요? –

+1

오, 나는 너무 어리 석다. 내 CSS에서 100 % 높이의 몸매 태그를 사용했습니다. 그래서 나는 JS가 스크롤 할 필요가 없다고 생각할 것이라고 가정하고있다. 다행히도, 비슷한 문제가 발생하면 다른 사람에게 도움이됩니다. @ zee와 다른 사람들에게 도움을 주신 모든 분들께 감사드립니다. –

0

당신이 컨트롤러에 사용할 경우는 다음과 같이 가능합니다 :

Plnkr example

app = angular.module('app', []) 
    .controller('scrollCtrl', function($scope, $document, $window) { 
    ctrl = this; 
    ctrl.pos = 0; 

    //Scroll function 
    ctrl.onScroll = function() { 
    $scope.$apply(function(){ 
     ctrl.pos = $window.scrollY; 
    }); 
    } 

    //Bind current this to function 
    ctrl.onScroll = ctrl.onScroll.bind(ctrl); 

    //Event 
    $document.on('scroll', ctrl.onScroll); 

    //Easy to unsubscribe from event: 
    $scope.on('destroy', function() { 
    $document.off('scroll', ctrl.onScroll); 
    }); 
}) 
관련 문제