Angular是否有内置指令来舍入输入值?
在这种情况下,数字过滤器是不合适的,因为我也要在ng模型中舍入实际的val
。
如果我要写一个,它会是什么样的?
答案 0 :(得分:6)
您可以在表达式中使用ngBlur
和Math.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