理由:
# Controller
$scope.price = -10;
# View
{{ price | currency }}
では($10.00)
なく-$10.00
?
私はこれが古い質問であることを知っていますが、受け入れられた答えは、問題の具体的な解決策なしに、なぜこれが起こるのかに答えるだけです. これを行う「最も正しい方法」は、次のようなデコレータを使用することだと思います。
angular
.module('app')
.config(['$provide', function($provide) {
$provide.decorator('$locale', ['$delegate', function($delegate) {
if($delegate.id == 'en-us') {
$delegate.NUMBER_FORMATS.PATTERNS[1].negPre = '-\u00A4';
$delegate.NUMBER_FORMATS.PATTERNS[1].negSuf = '';
}
return $delegate;
}]);
}]);
これは 1 回だけ呼び出され、それに依存するすべてのフィルターで有効であり、通貨の書式設定用のカスタム フィルターは必要ありません。
負の数をチェックすることで、私にとってはうまく機能します:
var app = angular.module('myApp');
app.filter('customCurrency', ["$filter", function ($filter) {
return function(amount, currencySymbol){
var currency = $filter('currency');
if(amount < 0){
return currency(amount, currencySymbol).replace("-", "(") + ')'
}
return currency(amount, currencySymbol);
};
}]);
更新: Angular 1.4 では、負の値を示すために括弧を使用しなくなりましたが、"-" 記号を使用するようになりました。ディスカッションへのリンクは次のとおりです: https://github.com/angular/angular.js/issues/12870
marc で説明されているようにデコレータを使用して、.negPre と .negSuf を返し、括弧を使用しました。
かっこを付けてもかまわず、これをすばやく簡単に実現する方法が必要な場合は、次のようにします
。-($250.00)
<ul ng-repeat="data in customers">
<li>
Balance:
<span ng-if="data.balance<0">-</span>
<span ng-if="data.balance>0">+</span>
{{data.balance | currency}}
</li>
</ul>
を削除したい場合は()
、独自のフィルターを作成するか、他の回答を試すことができます。