Как я могу обнаружить onKeyUp в AngularJS?

Как я могу обнаружить onKeyUp в AngularJS?

Я ищу 'ngOnkeyup' директива, похожая на ngChange, но я не могу найти ничего подходящего.

Если такой директивы не существует, существует ли чистый способ вызова контроллера из события onkeyup, встроенного в браузер?

Ответы на вопрос(8)

Просто чтобы помочь любому, кто, как и я, хотел запустить событие только по определенному ключу. Вот код, использующийng-keyup это вызывает мойcancel() функционировать только тогда, когда нажата клавиша Escape. Чтобы узнать, какой код ключа вы хотите посмотретьэтот сайт

ng-keyup="$event.keyCode == 27 ? cancel() : ''"

Обратите внимание, что, как упомянул @maklemenz, здесь используется встроенная директива Angular, доступная сейчас.

Если я правильно понимаю ваш вопрос, вы ищете директиву ng-keyup. Вот ссылка:http://docs.angularjs.org/api/ng.directive:ngKeyup

FYI - I was just searching for this today and it appears that there is a branch in Angular's github that addresses the issue of keyup keydown.

https://github.com/angular/angular.js/pull/1622

Он был объединен с мастером ... ОДНАКО он не похож на тот, который появится в релизе до 1.1.3

Для того, чтобы построить угловой с опцией ng-keyup, вы можете скачать код из git и запуститьrake package в папке. Конечно, в Windows это означает установку Node.js и Ruby и, возможно, некоторых других обручей (у меня были ошибки форка на win32)

Тем не менее, я получил «встроенный» Keyup в конце.

Я знаю, что мой ответ слишком поздно, но я надеюсь, что он может быть полезным для некоторых людей. Если вы ищете быстрый и простой метод, вы можете использовать это:

 // in the controller
    
    // get element by id, you can use by class...
    var element = angular.element('#element');
    
    element.keyup(function () {
    console.log('keyup fired');
    })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<input id="element" type="text" />

Для всех, кто ищет эту функцию сегодня, пожалуйста, используйте официальныйнг-KeyUp директива:

<input type="text" ng-keyup="{expression}" />
 19 мар. 2016 г., 19:39
@TheRedPea Вы можете поместить свое приложение ng и свой ключ ng на & lt; html / & gt ;. Затем добавьте функцию в $ rootScope или также добавьте ng-контроллер. Не проверено, но должно работать.
 19 мар. 2016 г., 17:27
Есть ли способ получить событие key up или keydown для оконного объекта в целом; чтобы я мог проверить, нажимается ли Ctrl?

Вам придется создать свою пользовательскую директиву, если директив по умолчанию недостаточно. Может быть как то так?

<!doctype html>
<html lang="en" ng-app="app">
  <body ng-controller="ctrl">
    <input ng-onkeyup="keyup()"/>
    <script src="js/lib/angular-1.0.0.min.js"></script>
    <script>
      angular.module('app', []).directive('ngOnkeyup', function() {
        return {
          restrict: 'A',
          scope: {
            func: '&ngOnkeyup'
          },
          link: function( scope, elem, attrs ) {
            elem.bind('keyup', scope.func);
          }
        };
      });

      function ctrl($scope) {
        $scope.keyup = function() {
          alert('keyup fired');
        };
      }
    </script>
  </body>
</html>

В дополнение к уже упомянутому Event Binder, теперь вы можете использовать эти удобные директивы ui-key * из Angular UI:

<textarea
 ui-keypress="{13:'keypressCallback($event)'}">
</textarea>
<textarea
  ui-keydown="{'enter alt-space':'keypressCallback($event)'}">
</textarea>
<textarea
  ui-keyup="{'enter':'keypressCallback($event)'}">
</textarea>

<script>
$scope.keypressCallback = function($event) {
alert('Voila!');
$event.preventDefault();
};
</script>

http://angular-ui.github.io/#/directives-keypress

Решение Вопроса

EDIT: see second answer below from maklemenz which refers to the new built-in ng-keyup directive

Вы могли бы использоватьбиблиотека angular-ui:

С Angular-UI, вы можете просто сделать

<input ui-event="{keyup: 'myFn($event)'}"

Если вы не хотите использовать другую библиотеку, самый эффективный и простой способ сделать это:

JS

myApp.directive('onKeyup', function() {
  return function(scope, elm, attrs) {
    elm.bind("keyup", function() {
      scope.$apply(attrs.onKeyup);
    });
  };
});

HTML:

<input on-keyup="count = count + 1">

Edit: Если вы хотите определить, какая клавиша была нажата, у вас есть два основных варианта. Вы можете добавить атрибут в директиву для обработки разрешенных клавиш в директиве или передать нажатую клавишу вашему контроллеру. Я бы вообще рекомендовал директиву обрабатывать метод key.

Вот пример обоих способов:http://jsfiddle.net/bYUa3/2

 30 окт. 2012 г., 05:28
Вот еще один вариант. (Я разветвил ваш jsfiddle Andy.) Использование $ parse и вызов его с помощью mixin позволяет увеличить гибкость - выражение может быть функцией или встроенным выражением и делать что угодно с$key значение.jsfiddle.net/g6Yvb/2
 19 нояб. 2013 г., 10:14
Пожалуйста, посмотрите на мой ответ наstackoverflow.com/a/18534733/1563700
 fadedbee07 июл. 2012 г., 13:53
Спасибо за Ваш ответ. Как мне узнать, какая клавиша была нажата с вашим решением неуглового интерфейса?
 fadedbee08 июл. 2012 г., 06:39
Это как раз то, что мне нужно. Спасибо за вашу помощь, я действительно начинаю любить использовать AngularJS. Плохо, что вы теряете годовой опыт использования KnockoutJS, но AngularJS выглядит гораздо более удобным в обслуживании и доступным для новых разработчиков.
 07 июл. 2012 г., 16:02
Я добавил кое-что в основной пост об обнаружении ключа.

Ваш ответ на вопрос