Вызов функции с помощью нажатия клавиш в Angularjs

0

У меня есть метод, который ng-click="startChat()" внутри тега div, используя ng-click="startChat()" - он отлично работает.

Я хотел бы, чтобы одна и та же функция вызывалась там, когда нажала клавишу, скажем, "p" в этом случае имеет код ключа 112.

Я попытался добавить в div следующее:

ng-keydown="$event.keyCode == 112 ? startChat()"

Я также пробовал то же самое с ng-keyupp, но ничего не происходит. Кто-нибудь знает, почему и как я могу достичь этой задачи?

Теги:
angularjs-scope

3 ответа

3

Вы должны рассматривать действие ng-keydown как вызов функции либо вашей $ scope в контроллере, либо функцию в вашей ссылке в директиве. Код ниже работает для меня.

<input type="text" ng-keydown='doSomething($event)'>

$scope.doSomething= function($event){
    var key = $event.keyCode;
    console.log(key)
}
  • 1
    Спасибо за ваш пример!
0

Попробуйте с директивой:

JS:

app.directive('myEnter', function () {
    return function (scope, element, attrs) {
        element.bind("keydown keypress", function (event) {
            if(event.which === 13) {
                scope.$apply(function (){
                    scope.$eval(attrs.myEnter);
                });

                event.preventDefault();
            }
        });
    };
});

HTML:

<div ng-app="" ng-controller="MainCtrl">
    <input type="text" my-enter="doSomething()">    
</div>

Шрифт: Как использовать событие нажатия клавиши в AngularJS?

Наш простой клавишный

Демо-версия:

function myController($scope) {
  $scope.lastKey = "---"

  $scope.keypress = function($event) {
    $scope.lastKey = $event.keyCode
  };
    
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>
  <h2>Example</h2>
  <div ng-controller="myController">

      <p>The new ng-keydown directive works perfectly fine as long as it is bound to an input field. Type to see keyCode: </p>
      <input ng-keydown="keypress($event)">
          <p>last key: {{lastKey}}</p>
          <div ng-keydown="keypress($event)" style="border: 1px solid blue;">
<p>Focusing this div (blue border) and typing however does not work, in spite of the documentation saying that the context for ng-keydown can be anything: http://code.angularjs.org/1.1.3/docs/api/ng.directive:ngKeydown</p>
<p>I can't seem to get it to cooperate unless there is an input field:
<input>
    </p>
    <p>How can I use ng-keydown for the entire document or selected spans, etc.?
    </p>
          </div>
  </div>
</div>
  • 0
    хорошая копия паста ........!
  • 0
    @Jai правильно, скопируйте и пропустите с исходными данными
Показать ещё 8 комментариев
0

Вы можете сделать это с помощью ng-keypress. Вызовите функцию на этом и проверьте keyCode.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню