angular 輸入框數字千分位、保留幾位小數點
阿新 • • 發佈:2019-01-29
網上查到一個關於千分位的指令,我稍微做了點完善,通用指令程式碼
myApp.directive('price', function($parse) { return { link: function (scope, element, attrs, ctrl) { //控制輸入框只能輸入數字和小數點 function limit(){ var limitV=element[0].value; limitV=limitV.replace(/[^0-9.]/g,""); //處理0開頭的整數 if ((/^0+[0-9]+$/).test(limitV)) { limitV=limitV.replace(/\b(0+)/gi,""); } //限定小數點後的位數 var digits = attrs['digits']?Number(attrs['digits']):2; if (limitV*Math.pow(10,digits)%1!=0) { var index = limitV.indexOf('.'); var last = index+digits+1; limitV = (""+limitV).substring(0,last); } element[0].value=limitV; $parse(attrs['ngModel']).assign(scope, limitV); format(); } //對輸入數字的整數部分插入千位分隔符 function format(){ var formatV=element[0].value; var array=new Array(); array=formatV.split("."); var re=/(-?\d+)(\d{3})/; while(re.test(array[0])){ array[0]=array[0].replace(re,"$1,$2") } var returnV=array[0]; for(var i=1;i<array.length;i++){ returnV+="."+array[i]; } element[0].value=returnV; $parse(attrs['ngModel']).assign(scope, formatV); } scope.$watch(attrs.ngModel,function(){ limit(); }) } }; })
html程式碼的引用,digits傳的是小數點後保留幾位,預設不傳保留2位
<input ng-model="money" price digits="1"/>