这是在AngularJS中设置onkeypress监听器的正确方法吗?

时间:2014-02-09 12:01:16

标签: angularjs

我想在AngularJS应用程序中设置一个onkeypress侦听器,以便能够捕获所有按键。

问题:

  • 这是使用AngularJS的正确方法吗?
  • 可以通过任何方式改进代码,使其更符合AngularJS最佳实践吗?

这是我正在使用的HTML代码:

<html ng-app="moduleName">
  <body ng-controller="ControllerName" ng-keypress="keyPress($event)">
  </body>
</html>

这是JavaScript代码:

var app = angular.module("moduleName", []);
var ControllerName = function($scope) {
    $scope.keyPress = function($event) {
        // Logic goes here.
    };
};

1 个答案:

答案 0 :(得分:1)

通常,Angular Application有多个控制器,因此,您可能需要: -

  1. 在应用程序初始化时将keyPress方法设置为rootscope(因为您似乎希望在应用程序的任何位置从keypress调用此方法。

    app.config(['$routeProvider', '$rootScope',
      function ($routeProvider, $rootScope) {
        $routeProvider.when('/Sample', {
            templateUrl: 'views/Sample.html',
            controller: 'sampleController'
        });
    
        $routeProvider.otherwise({ redirectTo: '/app' });
        $rootScope.keypress = function($event) {
            /* some code goes here */
        };
    }]);
    
  2. 您也可以将指令用于相同的目的,这看起来更合适的方式来处理这个

    app.directive('listenToKeypress', function() {
       return {
         restrict: 'A',
         link: function(scope, elem, attr, ctrl) {
                 elem.bind('keypress', function(e) {
                     /* do something here */
                 });
         }
       };
    });
    
  3. 和html可以是: -

    <html ng-app="moduleName">
      <body ng-controller="ControllerName" listen-to-keypress>
      </body>
    </html>