2016-06-21 1 views
2

Я создал угловую директиву, которая связывает короткое замыкание клавиатуры. Однако, как только это связано, он сохраняет привязку для всех остальных div. Но я привязался только к одному div. Как я отвязаю его после того, как он выполнит и перевяжет, когда пользователь нажимает на этот div. например:Как развязать события короткого замыкания на клавиатуре в угловых js

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'); 
     } 
    }); 
    } 
} }); 

в контроллере

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

в HTML

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

Цените любые предложения.

ответ

0

Не используйте $ document. Функция ссылки получает область действия и элемент, который она применяет для передачи ей.

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

При привязке к документу он прослушивает события, которые вырывают документ (страница). Если вы просто привязываетесь к самому элементу, вы получите только обработчик события, когда этот элемент имеет фокус и произойдет событие.

+0

Отлично. Это сработало. Большое спасибо. – user2406718

Смежные вопросы