javascript - 如何取消绑定(bind)angularjs中的键盘快捷键事件

标签 javascript html angularjs

我创建了一个绑定(bind)键盘快捷键的 Angular Directive(指令)。但是,一旦它被绑定(bind),它就会保持对所有其他 div 的绑定(bind)。但我只附加到一个 div。当用户在该 div 中单击时,我如何在执行后取消绑定(bind)并重新绑定(bind)。 例如:

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

在 Controller 中

$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>

感谢任何建议。

最佳答案

不要使用 $document。链接函数获取一个作用域,并将它应用到的元素传递给它。

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

当您绑定(bind)到文档时,它会监听使文档(页面)冒泡的事件。如果您只是绑定(bind)到元素本身,您只会在该元素具有焦点并且事件发生时触发事件处理程序。

关于javascript - 如何取消绑定(bind)angularjs中的键盘快捷键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37955898/

相关文章:

javascript - ASP.NET VB WebService 请求出现 AJAX 500 错误

html - 使图像从 div 中弹出

angularjs - 抑制 AngularJS 中的 ng Bind Html 错误

javascript - JSON 数据数组不是 JQPlot.js 的有效返回

javascript - 句点被识别为 ASCII 代码 190?

css - 位置 :fixed collapsing elements

javascript - 如何在 Angular js 中处理 ngRoute View 加载上的多个资源调用

javascript - angularjs for循环用于生日字段

javascript - JS es6 单击将类添加到另一个元素

javascript - 监控复选框的选中状态