2013-10-11 82 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 ... –