2016-04-26 9 views
8

Привет угловатых друзья,Angular2 валюты трубы изменения десятичного разделителя

я работаю на angular2 приложении (несколько на самом деле). И я живу в Нидерландах.

В настоящее время я форматирование своей валюты следующий:

{{someIntegerWithCentsToBeDivided/100 | валюта: «EUR»: true: «1.0-2»}}

Это будет выглядеть как 500 для Eurosign 5 и 501 для Eurosign 5.01.

Теперь мы, джеки, действительно любим запятую, так что кто-нибудь знает, как изменить. к a,?

Бонусные баллы, если кто-то знает, как показать 5, - при необходимости, когда нет центов. Мои мысли сейчас было бы, чтобы расширить CurrencyPipe

+0

Какой тип "locale" ваш браузер? Проверьте 'navigator.language' в консоли JS. –

+0

о, возможно, uk или нас, хороший звонок. Вы говорите, что на голландском языке, вероятно, должны отображаться запятые? –

+0

Это было бы моим догадком, но я на самом деле не пытался. Кстати, «CurrencyPipe» полагается на [Intl] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl), который по-прежнему не поддерживается некоторыми браузерами, такими как Safari и более старые версии IE. –

ответ

11

Ваша проблема, вероятно, было решено некоторое время назад, но только для справки для других голландских разработчиков (как я):

Создание пользовательского Pipe:

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

Теперь вы можете использовать:

{{someIntegerWithCentsToBeDivided | currencyFormat}} 

Труба имеет уже все нидерландские по умолчанию включены, но вы можете легко изменить их или используйте их как аргументы в шаблоне. Например:

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

даст $12 345.67 в качестве вывода.

+1

Я приму это сейчас, так как это рабочая версия. Однако то, что я сделал, имеет некоторые значения по умолчанию на моей трубке, и во время загрузки я читал настройки конфигурации и передачи. Таким образом, я мог бы сделать простой | деньги, а не все эти варианты все время. –

1

Я опоздал, но нашел решение.

Я просто создать канал, чтобы заменить что-нибудь:

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

я использовал это дважды, чтобы решить дело.

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

Это не лучшее решение, но я могу понять, почему это работает. –

+0

@ MathijsSegers, это плохое решение. Я использовал другой путь. Я создал свою собственную валютную трубку для достижения формата BRL с запятой. –

+0

@MateusFerreira любая конкретная причина, почему это плохое решение? – seBaka28

Смежные вопросы