2012-11-02 4 views
1

좋아, AngularJS로 작업 할 때 컨트롤러에서 DOM 조작을 수행하는 것은 나쁜 습관이라고 간주되므로 지시어와 $ scope를 사용해야하지만 이벤트 바인딩은 어떨까요? 그 모습에서 ngClick, ngMousedown, ngMouseenter 등과 같은 내장 된 이벤트 지시문을 고려해 볼 때 눈살을 찌푸리게됩니다. 그렇다면이 코드 조각이 어떻게 생겼는지 모릅니다. AngularJS 방법을 사용합니다.이벤트 바인딩 AngularJS Way?

내가 건물입니다 응용 프로그램은 무한 스크롤을 가지고 있으며,이 코드의 조각으로 구현된다 (즉, 현재 컨트롤러에 살고) :

$(document).bind('scroll', function(){ 
    if(!$scope.loadingIssues && $(window).scrollTop() + $(window).height() >= $('.user-feedback-list').offset().top + $('.user-feedback-list').height()) { 
     $scope.loadIssues(); 
    } 
}); 

이것은 사용자가 페이지를 스크롤 할 수와 페이지가 오면 무한 스크롤을 갖는 데이터를 저장하고있는 요소의 맨 아래로, 더 많은 데이터를로드하기 위해 함수를 시작합니다. 이제 모든 DOM 조작을 수행하지 않고 모든 함수가 $ 범위에 첨부 된 데이터를 업데이트하고 AngularJS가 DOM 업데이트를 수행하게하지만이 이벤트를 AngularJS의 모범 사례에 바인딩하도록하고 있습니까? 그렇다면 어떻게 AngularJS 방식으로이 작업을 수행 할 수 있습니까? (이 경우 지시어는 문서 객체에 지시문을 첨부 할 수 있다고 생각하지 않으므로 지시문이 작동하지 않을 것이라고 생각합니까?)

+0

나는 서비스를 사용하려고하고 그걸 다루려고한다고 생각한다. – maxisam

+0

"처치를 위해 달려 가라"는 말을 할 때 "다루는 법을 배우자"는 뜻입니까? 그렇지 않으면 나는 그것이 무엇을 의미하는지 모른다. – ryanzec

+0

아니요, http://docs.angularjs.org/api/angular.Module, run (initializationFn)을 의미합니다.이 모듈을 사용하여 인젝터가로드를 완료 할 때 수행해야하는 작업을 등록하려면이 메소드를 사용하십시오. 나는 이것이 도움이 될 것이라고 생각한다. – maxisam

답변

1

현재 이런 종류의 이벤트 바인딩을 수행하는 AngularJS 방법은 없다고 생각합니다. 누락 된 모든 이벤트에 대한 기본 지원을 추가하는 일은 제가 알고있는 한 진행 중이지만 아직 안정 버전에서는 출시되지 않았습니다.

이제 우리는 귀하가 질문하신 것처럼 그렇게해야합니다.

나는 당신이 일을하기 위해이 작업을 수행해야 함을하지만, 생각 : 당신이 AngularJS와 외부에서 이벤트를 처리하고 있기 때문에

$scope.$apply(
    function() { 
     $scope.loadIssues(); 
    } 
); 

이입니다. $ apply는 AngluarJS가 loadIssues() 호출의 결과로 발생할 수있는 모델 변경과 같은 것을 통지하도록합니다.