Apply currency filter to the input field in angularjs

angularjs, javascript, jquery

Solution

I created a simple directive that handles formatting input fields. Here is a jsfiddle example. To use it add this to your existing code.

<div ng-repeate="item in items">
    <input type="text"  ng-model="item.cost" format="currency" />
</div>

And add this directive to your code.

// allow you to format a text input field.
// <input type="text" ng-model="test" format="number" />
// <input type="text" ng-model="test" format="currency" />
.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)
            });

            elem.bind('blur', function(event) {
                var plainNumber = elem.val().replace(/[^\d|\-+|\.+]/g, '');
                elem.val($filter(attrs.format)(plainNumber));
            });
        }
    };
}]);

Problem

Hi when I am using span tags I can apply the money filter like ``` <div ng-repeat="item in items"> <span> {{item.cost | currency}} </span> </div> ``` I am wondering how I can apply same currency filter in input tag. i.e ``` <div ng-repeat="item in items"> <input type="text" ng-model="item.cost | currency" /> </div> ``` When I try to apply currency filter to the input field as above it doesnt work. Please let me know how to apply currency filter to input field. Thanks

Original source

Related problems