30

ライブデモ

理由:

# Controller
$scope.price = -10;

# View
{{ price | currency }}

では($10.00)なく-$10.00

4

7 に答える 7

78

私はこれが古い質問であることを知っていますが、受け入れられた答えは、問題の具体的な解決策なしに、なぜこれが起こるのかに答えるだけです. これを行う「最も正しい方法」は、次のようなデコレータを使用することだと思います。

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 回だけ呼び出され、それに依存するすべてのフィルターで有効であり、通貨の書式設定用のカスタム フィルターは必要ありません。

于 2015-05-08T11:08:47.987 に答える
18

負の数をチェックすることで、私にとってはうまく機能します:

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);
    };
}]);
于 2014-03-12T10:16:12.653 に答える
6

更新: Angular 1.4 では、負の値を示すために括弧を使用しなくなりましたが、"-" 記号を使用するようになりました。ディスカッションへのリンクは次のとおりです: https://github.com/angular/angular.js/issues/12870

marc で説明されているようにデコレータを使用して、.negPre と .negSuf を返し、括弧を使用しました。

于 2016-10-05T14:49:18.310 に答える
2

かっこを付けてもかまわず、これをすばやく簡単に実現する方法が必要な場合は、次のようにします
-($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>  

を削除したい場合は()、独自のフィルターを作成するか、他の回答を試すことができます。

于 2015-12-07T19:39:16.993 に答える