数字格式。我想要在没有指令的ng-blur上输入两位小数

时间:2016-05-31 06:18:18

标签: javascript angularjs html5

数字格式。我希望在没有指令的ng-blur上输入两位小数

我尝试使用指令工作正常。

define(['angular', 'mainModule'], function(angular, mainModule) {
    'use strict';
    mainModule.directive('numbformat', ['$filter', function ($filter) {
        return {
            require: '?ngModel',
            link: function (scope, elem, attrs, controller) {
                if (!controller) return;
                var DECIMAL_COUNT = 2;

                if(attrs.decimal){//if require to change decimal value specify declimal value as attribute in HTML
                    DECIMAL_COUNT = attrs.decimal;
                }

                controller.$formatters.unshift(function (a) {
                    return $filter(attrs.numbformat)(controller.$modelValue, DECIMAL_COUNT);
                });

                //For on Blur of Element manage Decimal and Format issuse
                elem.on('blur' , function() {

                    elem.val($filter(attrs.numbformat)(controller.$modelValue, DECIMAL_COUNT));
                });

                //For on Focus of Element manage Decimal and Format issuse
                elem.on('focus' , function(){
                    var actVal = $filter(attrs.numbformat)(controller.$modelValue)
                    elem.val(actVal);
                    elem[0].select();
                });

                controller.$parsers.unshift(function (viewValue) {
                    var plainNumber = viewValue.replace(/[^\d|\-+|\.+]/g, '');
                    var actVal = plainNumber.toString();

                    if(actVal.indexOf('.') > -1 || actVal.indexOf('-') > -1){
                        return plainNumber;
                    }else{
                        elem.val($filter(attrs.numbformat)(plainNumber));
                    }

                    return plainNumber;
                });
            }
        };
    }]);
})

但它给了我IE11的性能问题。 因为在每个错误的输入上调用指令所以在没有指令的情况下尝试它并转换为它

ng-keyup="formatval($event,'ExpStatement.MinVal')"
ng-blur="formatValBlur($event,'ExpStatement.MinVal')"

现在ng-keyup只允许小数或数字 在模糊我想要十进制强制

简而言之,我想转换指令。或任何人帮助我转换或任何可行的解决方案

我试过这个但没有工作

   $scope.formatval = function(event , val){
     $scope.val = $filter('number')( parseFloat($scope.val.replace(/[^\d|\-+|\.+]/g, "")) );
   }

2 个答案:

答案 0 :(得分:0)

仅允许文本框中的数字(有关详细信息,请参阅此处,如果不是数字,则显示错误https://docs.angularjs.org/api/ng/input/input%5Bnumber%5D

<input type="number" name="number" placeholder="number only" required>

在角度模糊事件/加密功能中,使用常规javascript格式化数字。

$scope.val.toFixed(2);

答案 1 :(得分:0)

也许这篇文章可以帮到你: http://jsfiddle.net/gsferreira/Lsv9f0b0/

它使用原生api:

<input type="number" class="form-control" name="myDecimal" placeholder="Decimal" ng-model="myDecimal" ng-pattern="/^[0-9]+(\.[0-9]{1,2})?$/" step="0.01" required />