2016-03-16 21 views
0

場角我想打一個字段,只需要數字和有一個隱含的數據指向。與隱含小數點

例如兩個數字,讓3,450.65,用戶可以鍵入345065,而不是3450.65,我們會自動插入小數。

一個很好的例子是在這裏:http://jsfiddle.net/n6ggtq7a/

不同的是它豐富的代碼,不會維護,似乎這項任務過於複雜。

話又說回來,有這樣plunker:http://plnkr.co/edit/iFnjcq?p=preview

哪些方式完成這項任務,但使用jQuery的。我想完全不用jQuery。

我看着NG-貨幣

<script> 
    angular.module('currencyExample', []) 
    .controller('ExampleController', ['$scope', function($scope) { 
     $scope.amount = 1234.56; 
    }]); 
</script> 
<div ng-controller="ExampleController"> 
    <input type="number" ng-model="amount" aria-label="amount"> <br> 
    default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br> 
    custom currency identifier (USD$): <span id="currency-custom">{{amount | currency:"USD$"}}</span> 
    no fractions (0): <span id="currency-no-fractions">{{amount | currency:"USD$":0}}</span> 
</div> 

但這需要有人類型的小數點。我覺得這應該存在的地方...我錯過了明顯的東西?

+1

在Plunker的'format'指令並不包含需要jQuery的帶出了jQuery進口和輸入仍然應該工作的任何代碼。 – miqid

+0

@miqid你是對的!感謝您指出了這一點。 – jenryb

回答

1

這裏有一個過濾器,變成一個整數量到貨幣:

myApp.filter('dollars', function($filter) { 
    return function(amount) { 
    return $filter('currency')(amount/100.0); 
    } 
}); 

你使用這樣的:

{{ amount | dollars }} 

這意味着你做你的會計在整數。

0

下面是一個強制輸入0-9數字並插入小數點的輸入字段指令。格式化的位有點難看,大概可以用2行來完成,但你明白了。

var mod = angular.module('app'); 

mod.directive('decnumber', function() { 
    return { 
     require: 'ngModel', 
     link: function (scope, element, attrs, modelCtrl) { 
      var decnumber = function (inputValue) { 

       if (inputValue == undefined) inputValue = ""; 
       var formattedVal = inputValue.replace(/[^0-9]/g, "").replace(/^0+/, ""); 

       if (formattedVal.length === 0) { 
        formattedVal = '0.00' + formattedVal; 
       } else if (formattedVal.length === 1) { 
        formattedVal = '0.0' + formattedVal; 
       } else if (formattedVal.length === 2) { 
        formattedVal = '0.' + formattedVal; 
       } else { 
        formattedVal = formattedVal.slice(0, -2) + '.' + formattedVal.slice(-2); 
       } 

       if (formattedVal !== inputValue) { 
        modelCtrl.$setViewValue(formattedVal); 
        modelCtrl.$render(); 
       } 
       return formattedVal; 
      } 
      modelCtrl.$parsers.unshift(decnumber); 
      decnumber(scope[attrs.ngModel]); 
     } 
    }; 
}); 

輸入:

<input decnumber type="text" name="decNumber" ng-model="decNumber">