15

数値をフォーマットし、角度で複数形にしたい。

例(ビットコインの数が与えられた場合):

         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,000count属性のように渡されるため、1000 だけが表示されるからです。例えば:

1001 => 1
1000 => 1
2000 => 2
etc...

例として、このデモ1,000のボックスnumber of peopleに貼り付けてみてください。


数値をフォーマットし、angular で複数形にするにはどうすればよいですか?

4

3 に答える 3

25

ここで正規表現を使用する必要はありません。

次のようwhenに、ディレクティブの属性にロジックを直接渡すことができます。ng-pluralize

<ng-pluralize count="amount" when="{'0': 'no bitcoins', 
                     '1': '1 bitcoin', 
                     'other': '{{amount | number:2}} bitcoins'}">
</ng-pluralize>

働くプランカー

于 2013-12-12T09:53:25.900 に答える
6

コンマを削除して、それを処理させることはできますか?

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/

于 2013-12-11T18:21:49.407 に答える
2

一般的な方法が必要な場合は、デフォルトで「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
于 2013-12-11T19:21:31.797 に答える