在AngularJS中,如果金额为负数,则可以通过货币过滤器来更改默认格式
根据标题,将说明如何更改默认的货币筛选器格式。
虽然可以考虑制作自定义筛选器的方法,但介绍的方法是最简单的应对方式,
所以即使有想要单独格式化的地方,也建议与自定义筛选器一起使用。
這個問題已經描述了解決方法。由於已經驗證了操作,所以我將它總結在一起。
https://github.com/angular/angular.js/issues/12870#issuecomment-180785981
实现的方式
书式设定例:
-99,999
angular.module(
…
)
.run(["$locale", ($locale: ng.ILocaleService) => {
let currencyPatterns = $locale.NUMBER_FORMATS.PATTERNS[1];
currencyPatterns.negPre = "\u00a4-";
currencyPatterns.negSuf = "";
}])
书式设定示例:(\99,999)
angular.module(
…
)
.run(["$locale", ($locale: ng.ILocaleService) => {
let currencyPatterns = $locale.NUMBER_FORMATS.PATTERNS[1];
currencyPatterns.negPre = "(\u00a4";
currencyPatterns.negSuf = ")";
}])
说明
在中文中,为负数表示定义了前缀和后缀,并且过滤器只是用前缀和后缀括起来,因此能够轻松地进行覆盖。
负数前缀和后缀定义
- https://github.com/angular/angular.js/blob/b4f5377a2f7590cbda7b1bf7448ce8836565dee2/src/ngLocale/angular-locale_ja-jp.js#L114-L115
$provide.value("$locale", {
"NUMBER_FORMATS": {
"PATTERNS": [
{
"negPre": "-",
"negSuf": "",
},
}
决定了负数表示的格式的部分。
if (number < 0 && !isZero) {
return pattern.negPre + formattedText + pattern.negSuf;
}