AngularJS指令,用于0到1之间的十进制数

时间:2013-10-15 18:11:09

标签: angularjs angularjs-directive angularjs-scope angular-ui angularjs-ng-repeat

我想在AngularJS中使用一个指令,该指令应该允许0到1之间的十进制数。此外,它也可以允许“-1”。

例如: -1有效 0有效 1有效 0.12有效 0.99有效 1.01无效

如果您有任何建议,请与我们联系。谢谢。

1 个答案:

答案 0 :(得分:6)

好的,如果新值无效,我做了一个忽略用户输入的指令。它允许部分书写文本,如0.-。确切的行为可以很容易地改变。现在它使用RegExp查找输入是否为数字,然后将此数字测试为-1或介于0和1之间。它还允许空字符串或-

app.directive('allowZeroToOne',function(){
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, el, attrs, ngModelCtrl){
      function fromUser(text) {
        var old = ngModelCtrl.$modelValue;
        var f = parseFloat(text);
        if(RegExp(/^(-?0*\d(\.\d*)?)$/).test(text) && (f===-1 || (f >= 0 && f <= 1)) || text==='' || text==='-') {
          return text;
        }else{
          ngModelCtrl.$setViewValue(old);
          ngModelCtrl.$render();
          return old;
        }
      }
      ngModelCtrl.$parsers.push(fromUser);
    }
  }
});

哦,现在它允许任何精度(所以0.111 ......也有效)。如果您只想要两位数,请将RegExp中的\d*更改为\d{0,2}。工作人员:http://plnkr.co/edit/xjx2dzVAJ0gM6j9Jbxrq

也许它有点矫枉过正,但它很有趣。