2016-06-21 36 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

請勿使用$文檔。鏈接函數獲取一個作用域並將其應用的元素傳遞給它。

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

當您綁定到文檔時,它正在偵聽冒出文檔(頁面)的事件。如果只綁定到元素本身,那麼只有當元素具有焦點併發生事件時纔會觸發事件處理程序。

+0

太好了。有效。非常感謝。 – user2406718