2016-01-29 73 views
1

我正在使用AngularJS創建一個項目,我希望將驗證集成到AngularJS中。我的要求是這個數字應該在AngularJS的1-4096之間。AngularJS中的數字驗證範圍

這裏是我的代碼:

<div class="col-lg-6 col-md-6"> 
    <input type="text" class="form-control" placeholder="VLAN ID" ng-model="exchange.vlanId" valid-number/> 
</div> 
+3

使用簡單的比較:'NUM> = 1 && NUM <= 4096'上模糊/ keyup事件 – Tushar

+1

添加到@Tushar給出的答案上,查看[documentation](https://docs.angularjs.org/api/ng/input/input%5Bnumber%5D)。有最小值和最大值的規定,如果交叉觸發一個錯誤。 –

+0

'valid-number'您是否爲@Karan創建了一個指令。 – Jai

回答

4

您應該創建非常簡單的指令,將允許驗證輸入的可重複使用的,可配置的,聲明的方式。

你已經有valid-number屬性,因此實現可以是這樣的:

angular.module('demo', []).directive('validNumber', [function() { 
 
    return { 
 
     require: 'ngModel', 
 
     link: function(scope, elem, attrs, ctrl) { 
 
      if (!ctrl) return; 
 
      var range = attrs.validNumber.split(',').map(Number); 
 
      ctrl.$validators.validNumber = function(value) { 
 
       return value >= range[0] && value <= range[1]; 
 
      }; 
 
     } 
 
    }; 
 
}]);
.error {color: brown;}
<script src="https://code.angularjs.org/1.4.8/angular.min.js"></script> 
 

 
<div ng-app="demo"> 
 
    
 
    <form name="form"> 
 
     <input type="text" class="form-control" placeholder="VLAN ID" name="vlanId" 
 
       ng-model="exchange.vlanId" valid-number="1,4096" /> 
 
    </form> 
 
    
 
    <div class="error" ng-show="form.$dirty && form.vlanId.$error.validNumber">VLAN ID should be in range 1-4096.</div> 
 
</div>

1

您可以在事件上的輸入與傳遞模型綁定和調用一個函數:

<input type="text" class="form-control" placeholder="VLAN ID" 
     ng-model="exchange.vlanId" 
     ng-keydown="obj.validate(exchange.vlanId)" valid-number/> 

現在,在控制器,你可以定義方法:

yourApp.controller('theController', ['$scope', function($scope){ 
    $scope.obj = { 
     validate:function(val){ 
      if(val < 1 || val > 4096){ 
       alert(val+' is out of range'); 
      } 
     } 
    }; 
}]); 

而且該指令valid-number也可用於:

yourApp.directive('validNumber', function($scope){ 
    return { 
     restrict:'E', 
     link:function(scope, el, attrs){ 
      el.on('keydown', function(){ 
      el.css('border', function(){ 
       return scope.exchange.vlanId < 1 || scope.exchange.vlanId > 4096 
       ? "red" : "green"; 
      }); 
      }); 
     } 
    }; 
}); 
+1

您是否注意到'valid-number'屬性? – dfsq

+1

「有效號碼」指令。 – Tushar

+0

我明白了,那也可以使用。嗯...最好是要求它...... :( – Jai