12

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

在此处输入图像描述

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

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

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

更不用说以某种方式分隔十进制数了..

理想的结果是

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

真的不可能与任何过滤器设置有关,是吗..?

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

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

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

虽然仍然对小数一无所知

4

3 回答 3

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">€&lt;/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中发布)

于 2013-09-12T14:55:27.727 回答
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>

于 2013-09-12T14:53:19.533 回答
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元素的 。

于 2013-09-12T15:06:27.717 回答