2016-04-26 10 views
8

Hallo eckige Freunde,Angular2 Währung Rohrveränderung Dezimaltrennzeichen

Ich arbeite an einer angular2 App (mehrere tatsächlich). Und ich lebe in den Niederlanden.

ich Formatierung meiner Währung zur Zeit, unter den folgenden:

{{someIntegerWithCentsToBeDivided/100 | Währung: 'EUR': true: '1.0-2'}}

Dies zeigt etwa 500 als Eurosign 5 und 501 als Eurosign 5.01 an.

Jetzt sind wir dutchies wirklich wie komma ist anders herum so weiß jemand, wie man das ändert. zu einem ,?

Bonuspunkte, wenn jemand weiß wie man 5 zeigt, - optional wenn es keine Cent gibt. Meine Gedanken wäre jetzt die CurrencyPipe zu erweitern

+0

Welche 'locale' verwendet Ihr Browser? Überprüfen Sie 'navigator.language' in der JS-Konsole. –

+0

oh, wahrscheinlich uk oder uns, guten Ruf. Sie sagen, dass auf Niederländisch wahrscheinlich die Kommas tatsächlich angezeigt werden sollten? –

+0

Das wäre meine Vermutung, aber ich habe es nicht wirklich versucht. Übrigens, die 'CurrencyPipe' basiert auf [Intl] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl), das immer noch nicht von einigen Browsern wie Safari und älteren IE-Versionen unterstützt wird. –

Antwort

11

Ihr Problem wurde wahrscheinlich vor einiger Zeit gelöst, aber nur als Referenz für andere niederländische Entwickler (wie ich):

ein eigenes Rohr erstellen:

import {Pipe} from '@angular/core'; 

@Pipe({ 
    name: 'currencyFormat' 
}) 
export class CurrencyFormat { 
    transform(value: number, 
     currencySign: string = '€ ', 
     decimalLength: number = 2, 
     chunkDelimiter: string = '.', 
     decimalDelimiter:string = ',', 
     chunkLength: number = 3): string { 

     value /= 100; 

     let result = '\\d(?=(\\d{' + chunkLength + '})+' + (decimalLength > 0 ? '\\D' : '$') + ')' 
     let num = value.toFixed(Math.max(0, ~~decimalLength)); 

     return currencySign+(decimalDelimiter ? num.replace('.', decimalDelimiter) : num).replace(new RegExp(result, 'g'), '$&' + chunkDelimiter); 
    } 
} 

Jetzt können Sie verwenden:

{{someIntegerWithCentsToBeDivided | currencyFormat}} 

The Pipe alle bereits die niederländischen Standardwerte enthalten, aber Sie können sie leicht oder ändern Verwenden Sie sie als Argumente in der Vorlage. Zum Beispiel:

{{1234567 | currencyFormat:'$',2,' ','.',3}} 

werden $12 345.67 als Ausgang geben.

+1

Ich akzeptiere das für jetzt, da es eine funktionierende Version ist. Allerdings habe ich einige Standardwerte auf meiner Pipe, und während des Bootstrappings habe ich die Konfigurations- und Passeinstellungen gelesen. So könnte ich ein einfaches | Geld statt all dieser Optionen die ganze Zeit. –

1

Ich bin zu spät, aber ich habe eine Lösung gefunden.

ich erstellen Sie einfach eine Pfeife nichts zu ersetzen:

import { PipeTransform, Injectable, Pipe }  from '@angular/core'; 
@Pipe({ 
    name: 'replace' 
}) 
@Injectable() 
export class ReplacePipe implements PipeTransform { 
    constructor(){} 
    transform(item: any, replace, replacement): any { 
    if(item == null) return ""; 
    item = item.replace(replace, replacement); 
    return item; 
    } 
} 

Früher habe ich das zweimal um Ihren Fall zu lösen.

{{ 5.01999 | currency:'BRL':true | replace:'.':',' | replace:',00':',-' }}} 
+0

Es ist nicht die beste Lösung, aber ich kann sehen, warum das funktioniert. –

+0

@MathijsSegers, Es ist eine schlechte Lösung. Ich habe einen anderen Weg gewählt. Ich habe meine eigene Währungs-Pipe erstellt, um das BRL-Format mit Komma zu erreichen. –

+0

@MateusFerreira einen konkreten Grund, warum das eine schlechte Lösung ist? – seBaka28