Как я могу вызвать ng-change при вводе пробела?
У меня есть функция, вызываемая при изменении значения textarea. Он отлично работает, если не нажать клавишу пробела, то ничего не вызывается. Есть ли способ активировать это? Технически содержимое меняется, и я хотел бы, чтобы функция вызывалась независимо.
Я прикрепляю скрипку с кодом. Вы можете видеть, что массив $scope.log
не нажимает новый элемент при нажатии пробела (также введите ключ), но он делает с любым другим ключом, который не является белым.
Пример скрипта: http://jsfiddle.net/UJWLN/4/
Ответы
Ответ 1
Вы можете использовать директиву ng-trim в своем входе и установить ее в значение false, например:
<textarea ng-change="changeFunction()" ng-model="myModel" ng-trim="false"></textarea>
Но это не сработает для каждого случая. Если вы хотите, чтобы что-то выполнялось при каждом нажатии клавиши, попробуйте создать настраиваемую директиву. Я написал один для вас:
http://jsfiddle.net/UJWLN/6/
myApp.directive('ngKeystroke', function(){
return {
restrict: 'A',
link: function(scope, elem, attrs){
elem.bind("keyup", function(){
scope.log.push('called');
scope.$digest();
});
}
};
});
Ответ 2
Чтобы запустить событие ng-change
на пробельной панели, я использовал ng-trim
. И он работает нормально.
<textarea ng-model="myCtrl.content" name="content" ng-trim="false" rows="5" cols="15" maxlength="250"></textarea>
Ответ 3
Лучше попробуйте с этим jsfiddle
html
<div ng-controller="MyCtrl">
<textarea key-listener="changeFunction()" ng-model="myModel"></textarea>
<div>{{log}}</div>
</div>
javascript
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.log=[];
$scope.changeFunction=function(){
$scope.log.push('Called');
}
}
myApp.directive('keyListener', function() {
return function(scope, elm, attrs) {
elm.bind("keyup", function(event) {
scope.$apply(attrs.keyListener);
});
};
})
Ответ 4
Для меня работал следующий код:
HTML:
<input type="text" ng-model="typedEmail" ng-keyup="($event.keyCode == 32) ? validateEmail(typedEmail) : ''">
Контроллер:
$scope.validateEmail = function(emailId){
//Your Code goes here
};
Код события 32: относится к коду события ключа пробела
Точно,
Код события 13: относится к коду ввода ключа события
Код события 16: относится к коду события Shift key
Код события 17: относится к коду события ключа управления
Код события 18: относится к коду события ключа Alt
Просто отправьте документацию ng-key, вы проверите значения keyCode там (в примере в документе angular).
Ответ 5
Если кто-то когда-нибудь вернется к этому.
Я просто прочитал это в документации:
https://docs.angularjs.org/api/ng/input/input%5Btext%5D
ngTrim
(Необязательно)
boolean
Если установлено значение false Angular, он не будет автоматически обрезать вход. Этот параметр игнорируется для элементов ввода [type = password], которые никогда не будут обрезать вход.