在Angularjs中格式化输入值

Jon*_*now 31 javascript jquery input angularjs

我正在尝试编写一个指令,自动格式化数字,<input>但模型没有格式化.让它工作很好,在加载时,输入中的值在控制器中显示为1,000,000和1000000,但是在键入时仅ngModel.$parsers触发该功能.ngModel.$formatters火焰是指令加载时和值为0时的唯一时间.

如何使它在按键上工作(我尝试绑定到按键/键盘但它不起作用).

这是我的代码:

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 || ''));
            });

        }
    };
}]);
Run Code Online (Sandbox Code Playgroud)

Max*_*tin 50

这是我们使用的工作示例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;
            });
        }
    };
}]);
Run Code Online (Sandbox Code Playgroud)

HTML似乎:

<input type="text" ng-model="test" format="number" />
Run Code Online (Sandbox Code Playgroud)

见演示 Fiddle

希望它的帮助

  • 如果我想添加像150.33这样的小数点,我需要按'.' 两次.这是为什么?无论如何要'修复'那个? (3认同)
  • 你怎么用``<input type ="number">``做到这一点?我试过了,但它失败了:http://jsfiddle.net/SAWsA/3957/ (2认同)
  • 当你连续两次输入相同的字母时它会失败.你可以看到解析不会触发的字母表. (2认同)

Abe*_*bel 5

这个模块对我来说很好.

https://github.com/assisrafael/angular-input-masks

例:

<input type="text" name="field" ng-model="number" ui-number-mask>
Run Code Online (Sandbox Code Playgroud)

  • 它看起来不错,虽然它使用的方法与接受的答案中描述的方法相同.当问到这个问题时,这也不存在. (2认同)