Format input value in Angularjs
angularjs, input, javascript, jquery
Solution
Here is working example where we use `unshift`:
angular.module('myApp.directives', []).directive('format', ['$filter', function ($filter) {
return {
require: '?ngModel',
link: function (scope, elem, attrs, ctrl) {
if (!ctrl) return;
ctrl.$formatters.unshift(function (a) {
return $filter(attrs.format)(ctrl.$modelValue)
});
ctrl.$parsers.unshift(function (viewValue) {
var plainNumber = viewValue.replace(/[^\d|\-+|\.+]/g, '');
elem.val($filter(attrs.format)(plainNumber));
return plainNumber;
});
}
};
}]);
The HTML seems:
<input type="text" ng-model="test" format="number" />
See Demo Fiddle
Hope its help
Problem
I'm trying to write a directive that automatically formats a number in the `<input>` but the the model isn't formatted. Getting it to work is fine, on load the value in the input is displayed as 1,000,000 and 1000000 in the controller, however when typing only the `ngModel.$parsers` function fires. The only time when the `ngModel.$formatters` fire is when the directive gets loaded and when the value is 0. How can I make it work on keypress(I've tried binding to keypress/keyup but it doesn't work). Here's my code: ``` angular.module('myApp.directives', []).directive('filterInput', ['$filter', function($filter) { return { restrict: 'A', require: 'ngModel', link: function(scope, element, attr, ngModel) { ngModel.$parsers.push(function fromUser(text) { return parseInt(text.replace(",", "")); }); ngModel.$formatters.push(function toUser(text) { console.log($filter('number')(text)); return ($filter('number')(text || '')); }); } }; }]); ```