Skip to content

Instantly share code, notes, and snippets.

@adrianoxavier
Last active December 27, 2015 03:29
Show Gist options
  • Save adrianoxavier/7259523 to your computer and use it in GitHub Desktop.
Save adrianoxavier/7259523 to your computer and use it in GitHub Desktop.
// <input number-format type="text" ng-model="value" />
angular.module('module', [])
.directive('numberFormat', function($filter) {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
var prepare = function(value) {
var numb = Number(value);
if (isNaN(numb)) {
return value;
}
return Number(numb).toFixed(2);
}
var parse = function(viewValue, noRender) {
if (!viewValue) {
return viewValue;
}
var clean = String(viewValue).replace(/[^0-9.]+/g, '').replace(/\./g, '').replace(/,/g, '');
if (!clean || clean.length == 0) {
clean = '000';
} else if (clean.length <= 2) {
clean = '00' + clean
}
clean = clean.slice(0, -2) + '.' + clean.slice(-2);
if (!noRender) {
ngModel.doRender();
}
return Number(clean);
}
ngModel.$parsers.unshift(parse);
ngModel.doRender = function() {
var clean = parse(prepare(ngModel.$viewValue), true);
if (!clean) {
return element.val('0,00');
}
element.val($filter('number')(clean, 2));
}
scope.$watch(attrs.ngModel, function() {
ngModel.doRender();
});
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment