web-dev-qa-db-fra.com

Séparateur décimal de changement de tuyau de devise Angular2

Bonjour angular amis,

Je travaille sur une application angular2 (plusieurs en fait). Et je vis aux Pays-Bas.

Actuellement, je formate ma devise avec les éléments suivants:

{{someIntegerWithCentsToBeDivided/100 | devise: 'EUR': vrai: '1.0-2'}}

Cela affiche quelque chose comme 500 pour Eurosign 5 et 501 pour Eurosign 5.01.

Maintenant, nous les Hollandais, nous aimons vraiment les virgules dans l'autre sens, donc tout le monde sait comment changer le. à un,?

Points bonus si quelqu'un sait afficher 5, - éventuellement quand il n'y a pas de cents. Je pense maintenant à étendre le CurrencyPipe

10
Mathijs Segers

Votre problème a probablement été résolu il y a quelque temps, mais juste pour référence pour d'autres développeurs néerlandais (comme moi):

Créez un tuyau personnalisé:

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);
    }
}

Vous pouvez maintenant utiliser:

{{someIntegerWithCentsToBeDivided | currencyFormat}}

Le Pipe contient déjà tous les paramètres par défaut néerlandais, mais vous pouvez facilement les modifier ou les utiliser comme arguments dans le modèle. Par exemple:

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

va donner $12 345.67 en sortie.

20
JanP

Je suis trop tard mais j'ai trouvé une solution.

Je crée juste un tuyau pour remplacer quoi que ce soit:

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;
  }
}

Je l'ai utilisé deux fois pour résoudre votre cas.

{{ 5.01999 | currency:'BRL':true | replace:'.':',' | replace:',00':',-' }}}
2
Mateus Ferreira