1. 程式人生 > >angular 輸入框數字千分位、保留幾位小數點

angular 輸入框數字千分位、保留幾位小數點

網上查到一個關於千分位的指令,我稍微做了點完善,通用指令程式碼
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"/>