Mis*_*hko 30 angularjs angularjs-filter
为什么这个:
# Controller
$scope.price = -10;
# View
{{ price | currency }}
Run Code Online (Sandbox Code Playgroud)
结果($10.00)而不是-$10.00?
小智 77
我知道这是一个古老的问题,但接受的答案只是回答为什么会发生这种情况,而没有具体解决问题.我认为这样做的"最正确的方法"是使用像这样的装饰器:
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;
}]);
}]);
Run Code Online (Sandbox Code Playgroud)
这只被调用一次,对任何依赖它的过滤器都有效,并且您不需要为您的货币格式设置自定义过滤器.
Rya*_*ugh 31
这是一种代表负面货币的流行方式.维基百科:
在簿记中,欠款通常用红色数字或括号中的数字表示,作为代表负数的替代符号.
您可以在Angular源代码中看到它们执行此操作(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: '$'
},
Run Code Online (Sandbox Code Playgroud)
Cam*_*mel 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);
};
}]);
Run Code Online (Sandbox Code Playgroud)
Leo*_*rdo 10
你的意思是显示 - 10.00美元而不是(10.00美元)?
默认情况下,至少angularJs版本1.2.1将显示括号.例如:(10.00美元)).
如果是这样,这就是我的情况.我为此创建了一个自定义过滤器:
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);
};
}]);
Run Code Online (Sandbox Code Playgroud)
因此,它委托内置货币过滤器并"装饰"或"取消装饰"括号.
我找不到一种方法来动态更改$ LocaleProvider.如果有人知道,请告诉我.
为莱昂纳多科雷亚喝彩
小智 6
更新:Angular 1.4不再使用括号表示负值,但现在使用" - "符号.以下是讨论的链接:https://github.com/angular/angular.js/issues/12870
我使用marc描述的装饰器返回.negPre和.negSuf以使用parens.
| 归档时间: |
|
| 查看次数: |
20231 次 |
| 最近记录: |