Как разделить и форматировать число в angularjs
Я хочу сделать числовое число и разделить его на angular.
Например (с учетом количества биткойнов):
0 => "John has no bitcoins"
1 => "John has 1 bitcoin"
2 => "John has 2 bitcoins"
12345.6789 => "John has 12,345.67 bitcoins"
Что я пробовал:
John has
<ng-pluralize count="bitcoin_amount | round:2"
when="{'0': 'no bitcoins',
'1': '1 bitcoin',
'other': '{} bitcoins'}">
</ng-pluralize>
Но это терпит неудачу, потому что для чисел, равных или превышающих 1000, они передаются как 1,000
в атрибуте count
, поэтому отображаются только тысячи.
Например:
1001 => 1
1000 => 1
2000 => 2
etc...
Попробуйте вставить 1,000
в поле number of people
эту демонстрацию для примера.
Как я могу отформатировать число И плюрализировать его в angular?
Ответы
Ответ 1
Здесь нет необходимости использовать регулярное выражение.
Вы можете передать свою логику непосредственно в атрибуте when
директивы ng-pluralize
следующим образом:
<ng-pluralize count="amount" when="{'0': 'no bitcoins',
'1': '1 bitcoin',
'other': '{{amount | number:2}} bitcoins'}">
</ng-pluralize>
Рабочий плункер.
Ответ 2
Можете ли вы просто удалить запятые и позволить им справиться с этим?
John has
<ng-pluralize count="bitcoin_amount.replace(',','') | round:2"
when="{'0': 'no bitcoins',
'1': '1 bitcoin',
'other': '{} bitcoins'}">
</ng-pluralize>
jsfiddle http://jsfiddle.net/9zmVW/
Ответ 3
Если вы хотите использовать общий метод, вы можете по умолчанию добавить 's',
и передать конкретные множественные формы со строкой:
function plural(s, pl){
var n= parseFloat(s);
if(isNaN(n) || Math.abs(n)=== 1) return s;
if(!pl) return s+'s';
return s.replace(/\S+(\s*)$/, pl+'$1');
}
// test:
[0, .5, 1, 1.5, 2].map(function(itm){
return [plural(itm+' bitcoin'),
plural(itm+' box', 'boxes'),
plural(itm+' foot', 'feet')];
}).join('\n');
// returned values:
0 bitcoins, 0 boxes, 0 feet
0.5 bitcoins, 0.5 boxes, 0.5 feet
1 bitcoin, 1 box, 1 foot
1.5 bitcoins, 1.5 boxes, 1.5 feet
2 bitcoins, 2 boxes, 2 feet
Ответ 4
Вы можете использовать l10ns Если вы не хотите использовать ngPluralize
, а также хотите сохранить логику в локализации место хранения. l10ns использует ICU Messageformat, который становится стандартом де-факто для обработки плюрализации. ICU Messageformat использует CLDR, который является хранилищем данных и используется многими крупными компаниями, такими как Apple и Google.
В обычном устном английском языке мы имеем две множественные формы singular
и plural
. CLDR определяет 6 различных видов множественных форм. И они zero
, one
, two
, few
, many
и other
. one
и two
не обязательно означает число 1 и 2.
Например, в CLDR определены две формы множественного числа для English
. one
и other
. Если вы используете интерфейс перевода в l10ns, вы получите пример каждой формы множественного числа.
Итак, если вы используете L10ns, ваш пример:
{bitcoins, plural, =0{no bitcoins} one{1 bitcoin} other{# bitcoins}}.
В приведенном выше примере =0
нацелен на точный случай.
Для получения дополнительной информации, пожалуйста, просмотрите документацию .