Как перенести символ евро с начала значения на него после?
Пример:
{{product.price | currency : "€"}}
произведет € 12.00
но я хотел бы 12.00 €
Как перенести символ евро с начала значения на него после?
Пример:
{{product.price | currency : "€"}}
произведет € 12.00
но я хотел бы 12.00 €
Вам не нужно взломать фильтр валют!
AngularJS имеет большую поддержку для i18n/l10n. Фильтр валюты использует символ валюты по умолчанию из службы локали и позиционирует его на основе настроек локали.
Итак, все о поддержке и настройке правильной локали.
<script src="i18n/angular-locale_de-de.js"></script>
Если вы используете npm
или bower
, все локали доступны через пакет angular-i18n
.
<span>{{ product.price | currency }}</span>
теперь выдаст следующий результат:
65,95 €
Поддержка нескольких локализаций
Если вы хотите поддерживать несколько локализаций, будьте осторожны с символом валюты, поскольку он изменяется на валюту по умолчанию используемого языка. Но 65,95 €
отличаются от $65,95
. Предоставьте символ валюты в качестве безопасного параметра:
<span>{{ product.price | currency:'€' }}</span>
В de-de
вывод все равно будет 65,95 €
, но если это место, например. en-us
это будет €65.95
(что, несмотря на некоторые другие высказывания правильный формат для отображения цен на евро на английском языке).
Чтобы узнать больше о angular и i18n/l10n, обратитесь к разработчику.
Вы не можете использовать фильтр валют. Вы можете написать свой собственный или просто использовать цифровой фильтр.
{{(produce.price | number:2) + "€"}}
Предлагаемые решения являются грязными.
сначала фильтр позволяет изменить символ, добавив его как параметр:
{{product.price | currency : "€"}}
но правильный способ - локализовать ваше приложение, как это было предложено компанией @Andreas если вы локализируете свое приложение, например, с помощью итальянской настройки локали (it-it) внутри вашего приложения, вам нужно только вызвать фильтр для получения знака €.
{{product.price | currency }}
Настройки итальянского языка устанавливают знак Euro перед значением валюты. Вы можете изменить значение своего языка или гораздо лучше переопределить их, как предлагается в следующем связанном ответе:
Почему валютный фильтр AngularJS форматирует отрицательные числа с круглыми скобками?
вы можете переопределить настройку локали, поместите свой валютный символ (\ u00A4) в качестве префикса или суффикса для положительного значения и отрицательного.
app.config(['$provide', function($provide) {
$provide.decorator('$locale', ['$delegate', function($delegate) {
if($delegate.id == 'it-it') {
$delegate.NUMBER_FORMATS.PATTERNS[1].negPre = '\u00A4\u00a0-';
$delegate.NUMBER_FORMATS.PATTERNS[1].negSuf = '';
$delegate.NUMBER_FORMATS.PATTERNS[1].posPre = '\u00A4\u00a0';
$delegate.NUMBER_FORMATS.PATTERNS[1].posSuf = '';
}
return $delegate;
}]);
}]);
поэтому после этой команды фильтр:
{{product.price | currency}}
будет выводить следующий результат
€ 12
используйте этот трюк.
<div>{{product.price | currency : '' }} €</div>
Это довольно старый вопрос, это разные в наши дни. Возможно, это было тогда и тогда.
Так что, если кто-то найдет это.
Но вам нужно включить правильный языковой стандарт, чтобы получить правильное форматирование валюты в фильтре валюты.
Проверьте документацию angular, например, форматирование валюты голландского языка составляет € 5,00. Английский составляет 5,00 евро, а американец - 5,00 евро.
Используя locale
(как объясняется в ответе в этом потоке -
в Angular валюта Js, символ евро после) выглядит как правильный" → правильный способ сделать это, но, похоже, не предлагает гибкость, чтобы поместить символ валюты или имя, где вы хотите, относительно значения, на которое вы ссылаетесь. Если вам нужно иметь свой символ валюты после вашего значения, вы можете иметь отдельное поле product.currency
и интерполировать его после (или до) вашего значения цены.
Итак, если у вас есть product.price = 40
и product.currency = '€'
, вы можете отобразить его как 40 € с {{product.price}} {{product.currency}}
. Или € 40 путем изменения полей: {{product.currency}} {{product.price}}
.
Возможно, вы захотите отформатировать значения product.price
через десятичный канал, если вы это сделали (https://angular.io/api/common/DecimalPipe). - Таким образом, "40,00 €" будет: {{product.amount | number:'2.2-2'}} {{product.currency}}
.
fyi - в этом случае у меня, вероятно, будет отдельное поле product.currency
и product.currencySymbol
(например, "USD" и "$" соответственно), но затем вы получаете больше функциональности locale
как указано в другом ответе, указанном выше. Но если вам нужно поместить название или символ валюты в другое место относительно значения, чем Angular позволит вам делать через свои родные каналы и хотеть использовать валюту, специфичную для записи или установленной вами работая без жесткого кодирования своего символа или имени на странице (например, если у вас есть несколько валют, которые вы показываете), это один из способов сделать это динамически.
Angularjs имеет большую поддержку для интернационализации и локализации. Применение интернационализации и локализации зависит от объема вашей заявки. Например, если ваше приложение поддерживает только евро, вам нужна только локализация для евро и не требуется вся валюта и ее форматирование.
В такой ситуации (Предположив, что ваша ситуация похожа на приведенную выше), вы можете создать конфигурацию приложения и установить локаль в качестве необходимой вам локализации с помощью некоторых декораторов. Функция декоратора перехватывает создание службы, позволяя ей переопределять или изменять поведение службы.
angular
.module('app', [])
.config(['$provide', function($provide) {
$provide.decorator('$locale', ['$delegate', function($delegate) {
$delegate.NUMBER_FORMATS = {
DECIMAL_SEP: '.',
GROUP_SEP: ',',
PATTERNS: [{ // Decimal Pattern
minInt: 1,
minFrac: 0,
maxFrac: 3,
posPre: '',
posSuf: '',
negPre: '-',
negSuf: '',
gSize: 3,
lgSize: 3
}, { //Currency Pattern
minInt: 1,
minFrac: 0,
maxFrac: 1,
posPre: '\u00A4',
posSuf: '',
negPre: '(\u00A4',
negSuf: ')',
gSize: 3,
lgSize: 3
}],
CURRENCY_SYM: '€'
}
return $delegate;
}]);
}])
.controller('appController', ['$scope', function($scope) {
$scope.price = 20.55;
}])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="appController">
Price : {{price | currency}}
</div>
</div>
Вы можете создать фильтр:
app.filter('euroFormat', function () {
return function (input) {
return input+' \u20AC';
};
});
и примените его к вашему html-коду с помощью:
<span>Price: {{product.price| euroFormat}}</span>
Я использую это решение в своем проекте (в производстве) во Франции (Он должен ВСЕГДА показывать 5,00 €, НИКОГДА не показывать € 5,00):
<span>Price: {{product.price| currency:""}} €</span>
Пожалуйста, прочитайте реальный вопрос об этом сообщении (Angular Js currency, символ euro после), прежде чем downvote будет слишком быстро!!!!!