Pourquoi ça:
# Controller
$scope.price = -10;
# View
{{ price | currency }}
résulte en ($10.00)
plutôt que -$10.00
?
C'est un moyen populaire de représenter les devises négatives. Wikipédia :
En comptabilité, les montants dus sont souvent représentés par des nombres rouges, ou entre parenthèses, comme notation alternative pour représenter des nombres négatifs.
Vous pouvez voir dans le code source Angular où ils font ceci (negSuf
/negPre
):
function $LocaleProvider(){
this.$get = function() {
return {
id: 'en-us',
NUMBER_FORMATS: {
DECIMAL_SEP: '.',
GROUP_SEP: ',',
PATTERNS: [
{ // Decimal Pattern
minInt: 1,
minFrac: 0,
maxFrac: 3,
posPre: '',
posSuf: '',
negPre: '-',
negSuf: '',
gSize: 3,
lgSize: 3
},{ //Currency Pattern
minInt: 1,
minFrac: 2,
maxFrac: 2,
posPre: '\u00A4',
posSuf: '',
negPre: '(\u00A4',
negSuf: ')',
gSize: 3,
lgSize: 3
}
],
CURRENCY_SYM: '$'
},
Je sais que c’est une vieille question, mais la réponse acceptée n’est que de répondre pourquoi cela se produit sans solution concrète au problème. Je pense que le "moyen le plus correct" de faire cela est d'utiliser un décorateur comme celui-ci:
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;
}]);
}]);
Ceci n'est appelé qu'une fois, valable pour tout filtre qui en dépend, et vous n'avez pas besoin de filtre personnalisé pour le formatage de votre devise.
Cela fonctionne mieux pour moi en vérifiant le nombre négatif:
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);
};
}]);
Voulez-vous dire affichage - 10,00 $ au lieu de (10,00 $)?
La version 1.2.1 au moins angularJs par défaut consiste à afficher entre parenthèses. Ex .: (10,00 $)).
Si oui, c'est ma situation. J'ai créé un filtre personnalisé pour cela:
var app = angular.module('myApp');
app.filter('customCurrency', ["$filter", function ($filter) {
return function(amount, currencySymbol){
var currency = $filter('currency');
if(amount.charAt(0) === "-"){
return currency(amount, currencySymbol).replace("(", "-").replace(")", "");
}
return currency(amount, currencySymbol);
};
}]);
Donc, il délègue au filtre monétaire intégré et "décore" ou "décolle" les parenthèses.
Je ne pouvais pas trouver un moyen de changer $ LocaleProvider à la volée. Si quelqu'un sait s'il vous plaît faites le moi savoir.
acclamations Leonardo Correa
Mise à jour: Angular 1.4 n'utilise plus les parenthèses pour indiquer les valeurs négatives, mais utilise maintenant le symbole "-". Voici un lien vers une discussion: https://github.com/angular/angular.js/issues/12870
J'ai utilisé le décorateur comme décrit par Marc pour rendre le .negPre et le .negSuf utiliser les parens.
Si cela ne vous dérange pas de garder la parenthèse et que vous voulez juste un moyen rapide et facile d'y parvenir
Par exemple: -($250.00)
essayez ce qui suit:
<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>
Si vous souhaitez supprimer le ()
, vous pouvez créer votre propre filtre ou essayer les autres réponses.
Modifiez votre fichier angular.js autour du numéro de ligne -36180 Change negPre et negSuf en supprimant - et en mettant entre parenthèses
Par exemple
Changer de :
"NUMBER_FORMATS": {
"CURRENCY_SYM": "$",
"DECIMAL_SEP": ".",
"GROUP_SEP": ",",
"PATTERNS": [
{
"gSize": 3,
"lgSize": 3,
"maxFrac": 3,
"minFrac": 0,
"minInt": 1,
"negPre": "-",
"negSuf": "",
"posPre": "",
"posSuf": ""
},
{
"gSize": 3,
"lgSize": 3,
"maxFrac": 2,
"minFrac": 2,
"minInt": 1,
"negPre": "-\u00a4",
"negSuf": "",
"posPre": "\u00a4",
"posSuf": ""
}
]
}
À
"NUMBER_FORMATS": {
"CURRENCY_SYM": "$",
"DECIMAL_SEP": ".",
"GROUP_SEP": ",",
"PATTERNS": [
{
"gSize": 3,
"lgSize": 3,
"maxFrac": 3,
"minFrac": 0,
"minInt": 1,
"negPre": "-",
"negSuf": "",
"posPre": "",
"posSuf": ""
},
{
"gSize": 3,
"lgSize": 3,
"maxFrac": 2,
"minFrac": 2,
"minInt": 1,
"negPre": "(\u00a4",
"negSuf": ")",
"posPre": "\u00a4",
"posSuf": ""
}
]
}