У меня есть метод, который ng-click="startChat()"
внутри тега div, используя ng-click="startChat()"
- он отлично работает.
Я хотел бы, чтобы одна и та же функция вызывалась там, когда нажала клавишу, скажем, "p" в этом случае имеет код ключа 112.
Я попытался добавить в div следующее:
ng-keydown="$event.keyCode == 112 ? startChat()"
Я также пробовал то же самое с ng-keyupp, но ничего не происходит. Кто-нибудь знает, почему и как я могу достичь этой задачи?
Вы должны рассматривать действие ng-keydown как вызов функции либо вашей $ scope в контроллере, либо функцию в вашей ссылке в директиве. Код ниже работает для меня.
<input type="text" ng-keydown='doSomething($event)'>
$scope.doSomething= function($event){
var key = $event.keyCode;
console.log(key)
}
Попробуйте с директивой:
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>
Вы можете сделать это с помощью ng-keypress. Вызовите функцию на этом и проверьте keyCode.