2017-02-05 11 views
8

Я в Австралии пытаются показать некоторые валютные ценности, я делаюAngular2 валюты символ

{{ portfolio.currentValue | currency : 'AUD' : true : '4.0' }} 

, и я получаю в результате A $ 1300000, я хотел бы показать $ 1300000 (нет A), не переходя к «USD».

Есть ли способ настроить свой валютный символ?

+0

Это не упоминается в [Документов] (https://angular.io /docs/ts/latest/api/common/index/CurrencyPipe-pipe.html), поэтому, вероятно, нет. Тем не менее, вы можете подклассифицировать или создать свою собственную трубу. – jonrsharpe

ответ

0

currencyPipe не предоставляет такую ​​возможность. Возможно, вы захотите написать свой собственный custom pipe, чтобы удалить «A» и выполнить эти каналы.

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

@Pipe({name: 'removeAFromString'}) 
export class RemoveAFromString implements PipeTransform { 
    transform(value: number){ 
    return value.substring(1); 

    } 
} 

Теперь CONCAT трубы:

{{ portfolio.currentValue | currency : 'AUD' : true : '4.0' | removeAFromString}} 
+0

Спасибо за ваш вклад, но если это невозможно, я бы предпочел решение, подобное [этому] (http://stackoverflow.com/a/35044368/7520663) –

2

Вот Whan вы хотите, это будет обрабатывать не только AUD, но все валюты:

import {Pipe, PipeTransform} from '@angular/core' 
import {CurrencyPipe} from "@angular/common"; 

@Pipe({ 
    name: "myCurrencyPipe" 
}) 
export class MyCurrencyPipe implements PipeTransform { 

    constructor(private currencyPipe: CurrencyPipe) {} 

    transform(value: any, currencyCode?: string, symbolDisplay?: boolean, digits?: string): string { 

     let transformed = this.currencyPipe.transform(value, currencyCode, symbolDisplay, digits); 
     let myTransformed:string[] = []; 

     for (var i = 0; i < transformed.length; i++) { 
      if(!this.isLetter(transformed[i])){ 
       myTransformed.push(transformed[i]) 
      } 
     } 

     return myTransformed.join(""); 
    } 

    isLetter(c) { 
     return c.toLowerCase() != c.toUpperCase(); 
    } 
} 

Называйте это как то: {{ portfolio.currentValue | myCurrency : 'AUD' : true : '4.0' }}

Сначала он сделает все, что делает CurrencyPipe, позвонив по номеру this.currencyPipe.transform(value, currencyCode, symbolDisplay, digits);, то он модифицирует вывод, удаляя из него все буквы.

app.module.ts:

@NgModule({ 
    declarations: [ 
    //.. 
    MyCurrencyPipe, 
    ], 
    providers: [ 
    //.. 
    CurrencyPipe 
    ] 
    //.. 
}) 

Если вы хотите создать только трубу, заботиться о CurrencyPipe выходе:

@Pipe({ 
    name: 'removeLettersFromStringPipe' 
}) 
export class RemoveLettersFromStringPipe implements PipeTransform { 
    transform(value: string){ 

    let myTransformed:string[] = []; 

    for (var i = 0; i < value.length; i++) { 
     if(!this.isLetter(value[i])){ 
      myTransformed.push(value[i]) 
     } 
    } 

    return myTransformed.join(""); 
    } 

    isLetter(c) { 
     return c.toLowerCase() != c.toUpperCase(); 
    } 
} 

Используйте его как {{ portfolio.currentValue | currency : 'AUD' : true : '4.0' | removeLettersFromStringPipe}}

0

Как указывается в других ответах , мы использовали для этого настраиваемый канал, так как я тоже не мог найти способ настроить символ для AUD.

@Pipe({ 
    name: 'aud' 
}) 
export class AudPipe implements PipeTransform { 

transform(value: number): any { 

    if (value === undefined || value === null) { 
     return null; 
    } 

    let numberPipe = new DecimalPipe('en-AU'); 
    return '$' + numberPipe.transform(value, '1.2-2'); 
} 

}

3

Вы можете установить локаль в Австралию, а затем для AUD валюты, он просто будет отображать $.

В ваших поставщиков приложений добавить следующее:

import { LOCALE_ID } from '@angular/core'; 
... 
{ provide: LOCALE_ID, useValue: 'en-AU' } 

Тогда следующий будет просто отображать $:

{{ portfolio.currentValue | currency : 'AUD' : true : '4.0' }} 
Смежные вопросы