2013-10-11 87 views
2

Angular是否有一个内置指令来舍入输入值?角度指令舍入十进制数

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

回答

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

这真的取决于你怎么想它的工作。它应该限制用户的输入吗?你介意模型和视图价值不同吗?模型上的无效数字输入应该为空吗?这些都是你要做的决定。上面的指令会将无效数字转换为空。

+0

有没有办法让输入框中的值更新?它绑定到ng模型,它为什么没有获取更新? – 9blue

+0

是的,你可以,这是一个更新的功能。我最初并没有包括它的原因是,你不再舍入数字,只是限制输入小数。您可以添加更多的逻辑来满足您的需求。 http://plnkr.co/edit/BZHBJL4RZiStrcSTABZn?p=preview – Adam

+0

@Adam链接您的评论,不起作用,我可以把数字上的小数。 –

6

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

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

JSFiddle please ... –