2016-10-30 46 views
0

我希望有TryParse,但我想没有在AngularJS。我试图用angular.isNumber()。我想让我的程序执行的操作是:用数字0替换任何非数字输入。它实际上做了什么:输入框忽略了不允许写下来的任何不是数字的东西。AngularJS - 如何将数字0,如果输入不是数字

<script> 
    var app = angular.module('BindingsApp', []); 

    app.controller('InputCtrl', function($scope) { 
     $scope.num3 = 0; 
     $scope.edit = function() { 

      $scope.num1 = parseInt($scope.num1); 
      $scope.num2 = parseInt($scope.num2); 

      function isNumeric(num) { 
       return !isNaN(num); 
      } 

      if (!angular.isNumber($scope.num1)) { 
       $scope.num1 = 0; 
      } 

      if (!angular.isNumber($scope.num2)) { 
       $scope.num2 = 0; 
      } 

      $scope.num3 = $scope.num1 + $scope.num2; 
     }; 
    }); 
</script> 

<input type="text" ng-model="num1" ng-change="edit()" value="isNumeric(num1)" /> 
<br /> 
<input type="text" ng-model="num2" ng-change="edit()" value="{{num2}}" /> 
<br /> 
<input type="text" ng-model="num3" ng-change="edit()" value="{{num3}}" /> 
<br /> 

回答

1

简单的方法就是更换

<input type="text" ng-model="num1" ng-change="edit()" value="isNumeric(num1)" /> 
<br /> 

<input type="number" ng-model="num1" ng-change="edit()" /> 
<br /> 

type="number"将只允许数字values.No需要编写任何额外的代码

编辑: 中序,以取代非数值为0,并允许数值,这里是一个指令

app.directive('productionQty', function() { 
    return { 
    require: 'ngModel', 
    link: function (scope, element, attr, ngModelCtrl) { 
     function fromUser(text) { 
     var transformedInput = text.replace(/[^0-9]/g, '0'); 
     console.log(transformedInput); 
     if(transformedInput !== text) { 
      ngModelCtrl.$setViewValue(transformedInput); 
      ngModelCtrl.$render(); 
     } 
     return transformedInput; 
     } 
     ngModelCtrl.$parsers.push(fromUser); 
    } 
    }; 
}); 

DEMO

+0

谢谢,这是一个学校任务,我被指示不要使用type =“number”,而只是使用Angular.JS来解决它: - \ (它也不会将任何非数字输入替换为0,所以它仍然不能回答我的需求) – tomersss2

+0

@LifeLess检查演示 – Sajeetharan

+0

演示是伟大的,非常感谢很多人,这是非常有益的 – tomersss2

0

这应该做的伎俩:

app.controller('InputCtrl', function($scope) { 
    $scope.num3 = 0; 
    $scope.edit = function() { 

     function isNumeric(num) { 
      return !isNaN(num); 
     } 

     if (NaN($scope.num1)) { 
      $scope.num1 = 0; 
     }else{ 
      $scope.num1 = parseInt($scope.num1); 
     } 

     if (NaN($scope.num2)) { 
      $scope.num2 = 0; 
     } 
     else{ 
      $scope.num2 = parseInt($scope.num2); 
     } 

     $scope.num3 = $scope.num1 + $scope.num2; 
    }; 
}); 

如果parseInt函数非数字字符,将其值设置为NaN的,所以它最好不要解析,除非你确信it'a一个数字。同样由于某种原因,angular.isNumber将$ scope.num1的数值视为不是数字。这很愚蠢。因此我用NaN替换它。希望这可以工作。我没有验证特殊字符,所以请检查一下。

相关问题