角度指令用于舍入十进制数

时间:2013-10-11 20:22:11

标签: angularjs angularjs-directive

Angular是否有内置指令来舍入输入值?

在这种情况下,数字过滤器是不合适的,因为我也要在ng模型中舍入实际的val。 如果我要写一个,它会是什么样的?

3 个答案:

答案 0 :(得分:6)

您可以在表达式中使用ngBlurMath.round

<input type="number" ng-model="number" ng-blur="number = Math.round(number)" />

答案 1 :(得分:3)

您可以使用指令创建双向绑定转换。这是一个简单的例子:

app.directive('roundConverter', function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, elem, attrs, ngModelCtrl) {
      function roundNumber(val) {
        var parsed = parseFloat(val, 10);
        if(parsed !== parsed) { return null; } // check for NaN
        var rounded = Math.round(parsed);
        return rounded;
      }
      // Parsers take the view value and convert it to a model value.
      ngModelCtrl.$parsers.push(roundNumber);
   }
 };
});

http://plnkr.co/edit/kz5QWIloxnd89RKtfkuE?p=preview

这实际上取决于你希望它如何工作。它应该限制用户输入吗?你介意模型和视图值有所不同吗?模型上的无效数字输入是否为空?这些都是你做出的决定。上面的指令会将无效数字转换为空。

答案 2 :(得分:2)

<script>
      .controller('ExampleController', ['$scope', function($scope) {
  $scope.val = 1234.56789;
}]);
</script>
<div ng-controller="ExampleController">
<label>Enter number: <input ng-model='val'></label><br>
  Default formatting: <span id='number-default'>{{val | number}}</span><br>
  No fractions: <span>{{val | number:0}}</span><br>
  Negative number: <span>{{-val | number:4}}</span>
</div>

输出: 输入数字: 1234.56789

默认格式:1,234.568

无分数:1,235

负数:-1,234.5679

参考:https://docs.angularjs.org/api/ng/filter/number