2016-06-21 2 views
2

키보드 단축키를 바인딩하는 각도 지시문을 만들었습니다. 그러나 일단 바인드되면 다른 모든 div에 대한 바인딩을 유지합니다. 그러나 나는 하나의 div에만 붙였다. 사용자가 해당 div 내에서 클릭하면 실행 후 바인딩을 다시 바인딩하는 방법 예 : 컨트롤러각도 js에서 키보드 단축키 이벤트를 바인딩 해제하는 방법

$rootScope.$on('Ctrl+s', function (e) { 
    $scope.$apply(function() { 
     $scope.doDummyAction(); 
    }); 
    }); 

에서

angular.module('Dummy').directive('keypressEvents', 
function ($document, $rootScope) { 
    return { 
    restrict: 'A', 
    link: function() { 
    $document.bind('keydown', function (e) { 
     if ((e.which == '115' || e.which == '83') && (e.ctrlKey || e.metaKey)){ 
     $rootScope.$broadcast('Ctrl+s'); 
     } 
    }); 
    } 
} }); 

<div keypress-events>this is a div that binds keyboard shortcut</div> 
    <div>Another div which doesn't need a short cut key</div> 

HTML에서 어떤 제안을 주셔서 감사합니다.

답변

0

$ document를 사용하지 마십시오. 링크 함수는 스코프와 전달 된 요소를 가져옵니다.

link: function(scope, iElem){ 
    iElem.bind(... 
} 

문서에 바인딩하면 문서를 버블 링하는 이벤트 (페이지)를 듣고 있습니다. 요소 자체에 바인딩하면 요소에 포커스가 있고 이벤트가 발생할 때만 이벤트 처리기가 트리거됩니다.

+0

좋습니다. 그것은 효과가 있었다. 고마워. – user2406718

관련 문제