【问题标题】:Binding keyboard events in AngularJS在 AngularJS 中绑定键盘事件
【发布时间】:2014-03-28 10:17:07
【问题描述】:

如果您使用的是 AngularJS,那么绑定键盘按键事件的理想方法是什么?

现在我正在控制器内设置键盘事件的映射...

ngApp.controller('MainController', function MainController($scope) {
$scope.keyEvents = function() {
    if($('calculator').hasClass('open')) {
      switch(e.keyCode) {
       case 8:
          calc.deleteDigit();
          return;
        case 13:
          calc.equals();
            *etc., etc.*
      }
    }
    var $article = $("article");
    var $articleScrollTop = $article.scrollTop();
    //PageDown
    if(e.keyCode == 34) {
        $('article').animate({
            scrollTop: ($articleScrollTop + 480 + i++)
        }, 500);
    }
    //PageUp
    if(e.keyCode == 33) {
        $article.animate({
            scrollTop: ($articleScrollTop - 480 - i++)
        }, 500);
    }  
  }
}

我开始认为在 AngularJS 应用程序中附加键盘事件是一种最佳实践。

我应该使用element.bind 并在相应指令中设置键盘事件吗?

提前感谢您的帮助!

【问题讨论】:

标签: javascript angularjs keyboard


【解决方案1】:

您想在哪里捕捉这些事件?它是在全球范围内还是只是特定的?

这是一个限制日期键输入字段的示例。

然后你只需像这样装饰你的输入标签

HTML

<input type="text" date-keys />

角度指令

angularDirectivesApp.directive('dateKeys', function () {
return {
    restrict: 'A',
    link: function (scope, element, attrs, controller) {
        debugger;
        element.on('keydown', function (event) {
            if (isNumericKeyCode(event.keyCode) || isForwardSlashKeyCode(event.keyCode) || isNavigationKeycode(event.keyCode))
                return true;
            return false;

        });
    }
}

function isNumericKeyCode(keyCode) {
    return (event.keyCode >= 48 && event.keyCode <= 57)
        || (event.keyCode >= 96 && event.keyCode <= 105);
}

function isForwardSlashKeyCode(keyCode) {
    return event.keyCode === 191;
}

function isNavigationKeycode(keyCode) {
    switch (keyCode) {
        case 8: //backspace
        case 35: //end
        case 36: //home
        case 37: //left
        case 38: //up
        case 39: //right
        case 40: //down
        case 45: //ins
        case 46: //del
            return true;
        default:
            return false;
    }
}
});

【讨论】:

  • debugger; 是什么?
  • 哎呀。我不小心把那个放在那里了。它只会导致开发工具在运行时停止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多