angular.js - 用西班牙语包装货币符号和十进制数字

时间:2013-09-12 14:38:09

标签: javascript angularjs currency

你能用角度做这样的事吗?

enter image description here

这样做不太可能,因为不解析标签或其他东西

{{ 10000 | currency:"<span>$</span>" }}

http://plnkr.co/edit/WluYoe2Ltmhmhvr8BBWX?p=preview

更别说单独的十进制数字..

理想的结果是

1 000 000<span class="dec">,00</span><span class="cur">€</span>

它不是真的可以用任何过滤器设置吗??

我可以尝试修改角度的货币过滤器和formatNumber函数,但它仍然会将其作为文本而不是span元素。

//编辑 你实际上可以这样做http://plnkr.co/edit/dcEhHi8sp43564ZvC4D1?p=preview

<p ng-bind-html-unsafe="10000 | currency:'<span>$</span>'"></p>

仍然对小数无能为力

3 个答案:

答案 0 :(得分:13)

您可以创建自定义过滤器

app.filter('euro', function () {
    return function (text) {
        text = text.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1 ");
        var t = text + '<span class="desc">,00</span><span class="cur">€</span>';
        return t;
    };
});

<span ng-bind-html-unsafe="1000000 | euro"></span>

结果将是

1 000 000,00€

Working Demo

(正则表达式由@Paul Creasey在他的回答https://stackoverflow.com/a/1990554/304319中发布)

答案 1 :(得分:6)

实际上可以这样做

<p ng-bind-html-unsafe="10000 | currency:'<span>$</span>'"></p>

或将其包裹在本机货币过滤器中,如此

app.filter('currencys', ['$filter', '$locale', 
    function($filter, $locale) {
        return function (num) {
            var sym = $locale.NUMBER_FORMATS.CURRENCY_SYM;
            return $filter('currency')(num, '<span>'+ sym +'</span>');
        };
    }
]);

然后像这样使用它

<span ng-bind-html-unsafe="10000 | currencys"></span>

答案 2 :(得分:4)

某些区域设置的前缀是货币符号,有些区域后缀是固定的,例如“一百欧元”将被标记为“100欧元”或“100欧元”。那么呢?

如果您不介意进行一些解析,请继续阅读:

$locale服务包含货币格式化所需的符号:

$locale.NUMBER_FORMATS.CURRENCY_SYM
$locale.NUMBER_FORMATS.DECIMAL_SEP

$locale.NUMBER_FORMATS.PATTERNS[]还有更详细的信息 - 位置[1]的值适用于货币)

您可以创建一个使用currency过滤器获取初始格式化字符串的指令,例如"1 000 000,50 €"然后搜索$locale.NUMBER_FORMATS.CURRENCY_SYM并将其替换为<span>{{ $locale.NUMBER_FORMATS.CURRENCY_SYM }}</span>,对小数点分隔符执行类似操作,然后设置元素的innerHTML