Хороший способ сделать это состоит в использовании директивы. Вот как это можно сделать:
вид:
<div ng-app="foo" ng-controller="fooController">
<textarea text-length-handler="doThing()" text-length="6" ng-model="text">
</textarea>
</div>
ЯШ:
angular.module('foo', [])
.directive('textLength', function(){
return {
restrict: 'A',
require: 'ngModel',
scope: {
textLengthHandler: '&'
},
link: function ($scope, $element, $attrs, ctrl) {
var limit = parseInt($attrs.textLength);
var handler = function(){
if (ctrl.$modelValue.length >= limit) {
$scope.textLengthHandler()
}
};
$element.on('keypress', handler);
// remove the handler when the directive disappears
$scope.$on('destroy', function(){
$element.off('keypress', handler)
});
}
}
})
Fiddle здесь:
http://jsfiddle.net/dtq0mz8m/
не будет работаем, если нажата пробельная клавиша. –
Это было бы легко исправить, просто удалите все пробелы из функции '$ scope.textChanged'. – JimmyBoh
Вы также можете добавить 'ng-trim =" false "' во входной тег, чтобы исключить автоматическое обрезку пробела для пробела. –