Angular.js - обертывание символа валюты и десятичных чисел в промежутках
Можете ли вы сделать что-то подобное в angular?
![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>
Невозможно сделать какие-либо настройки фильтра, это..?
Я мог бы попробовать и изменить фильтр валюты angular и функцию formatNumber
, но он все равно будет воспринимать его как текст, а не элемент span.
//редактируем
вы действительно можете это сделать http://plnkr.co/edit/dcEhHi8sp43564ZvC4D1?p=preview
<p ng-bind-html-unsafe="10000 | currency:'<span>$</span>'"></p>
по-прежнему не знает о десятичных знаках, хотя
Ответы
Ответ 1
Фактически это возможно сделать
<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
Вы можете создать собственный фильтр
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€
Рабочий демонстрационный пример
(Регулярное выражение опубликовано @Paul Creasey в его ответе fooobar.com/questions/47178/...)
Ответ 3
В некоторых локалях есть префикс валюты, некоторые с пометкой, например. "сто евро" будет предоставлено "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
элемента.