Angular.js – enveloppement du symbole monétaire et des nombres décimaux en étendue

Pouvez-vous faire quelque chose comme ça en angulaire?

Entrez la description de l'image ici

Il n'est pas tout à fait possible de le faire, comme cela ne permet pas d'analyser les tags ou quelque chose

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

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

Encore moins d'un nombre décimal séparé ..

Le résultat idéal serait

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

Ce n'est pas vraiment possible avec les paramètres de filtrage est-ce …?

Je pourrais essayer de modifier le filtre monétaire angulaire et la fonction formatNumber , mais il le prendrait toujours comme un texte plutôt que comme un élément span.

// edit, vous pouvez effectivement faire ceci http://plnkr.co/edit/dcEhHi8sp43564ZvC4D1?p=preview

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

Toujours clueless sur les décimales cependant

Vous pouvez créer un filtre personnalisé

 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> 

Le résultat sera

 1 000 000,00€ 

Démonstration de travail

(Le regex est publié par @Paul Creasey dans sa réponse https://stackoverflow.com/a/1990554/304319 )

C'est réellement possible de le faire

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

Ou enveloppez-le autour du filtre monétaire natif comme celui-ci

 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>'); }; } ]); 

Et utilisez-le comme ça

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

Certaines régions ont le signe de la devise préfixé, certains postfixés, par exemple "100 euros" seraient rendus "100 €" ou "100 €". Quoi alors?

Si cela ne vous dérange pas de faire des analyses, lisez ceci:

Le service $locale contient les symboles requis pour le formatage de devise:

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

(Et il y a des informations plus détaillées dans $locale.NUMBER_FORMATS.PATTERNS[] – la valeur à la position [1] correspond aux devises)

Vous pouvez créer une directive qui utilise le filtre de currency pour obtenir la chaîne formatée initiale, par exemple "1 000 000,50 €" puis recherchez les $locale.NUMBER_FORMATS.CURRENCY_SYM et remplacez-le par <span>{{ $locale.NUMBER_FORMATS.CURRENCY_SYM }}</span> , faites quelque chose de similaire pour le séparateur décimal, puis définissez innerHTML d'un élément.