2016-10-30 111 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替換它。希望這可以工作。我沒有驗證特殊字符,所以請檢查一下。

相關問題