Angular 5 - 货币管道
Angular 5 - currencyPipe
我对来自 Angular 的内置 CurrencyPipe 有疑问。
我需要使用 CurrencyPipe 显示货币符号,但我无法使用它,除非我提供输入数字。
因为 CurrencyPipe 使用当前语言环境来获取货币符号,所以我认为输入数字可以是可选的。
当前行为:
{{ 1 | currency:'USD' }} -->
需要的行为:
{{ null | currency:'USD' }} --> $
你们中有人知道默认管道是否可行吗?
谢谢!!
更新Angular8
import { Pipe, PipeTransform } from '@angular/core';
import { CurrencyPipe } from '@angular/common';
@Pipe({ name: 'CustomeCurrency' })
export class CustomCurrencyPipe implements PipeTransform {
constructor(private currencyPipe: CurrencyPipe) { }
transform(value: any, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string {
if (value != null)
return this.currencyPipe.transform(value, currencyCode, display, digitsInfo, locale);
return this.currencyPipe.transform(0, currencyCode, display, locale).split('0.00')[0];
}
}
试试这个简单的自定义货币管道
{{ null | CustomeCurrency }}</p>
import { Pipe, PipeTransform } from '@angular/core';
import { CurrencyPipe } from '@angular/common';
@Pipe({ name: 'CustomeCurrency' })
export class CustomCurrencyPipe implements PipeTransform {
constructor(private currencyPipe: CurrencyPipe) { }
transform(value: any, currency: string, symbol: boolean = false): string {
if (value != null)
return this.currencyPipe.transform(value, currency, symbol);
return this.currencyPipe.transform(0, currency, symbol).split('0.00')[0];
}
}
货币管道已在 Angular v5 中更改。 symbolDisplay 选项(第三个参数)现在是一个字符串而不是布尔值。可接受的值为 "code"、"symbol" 或 "symbol-narrow".
如果您收到错误消息 货币管道已在 Angular v5 中更改。 symbolDisplay 选项(第三个参数)现在是一个字符串而不是布尔值。可接受的值为 "code"、"symbol" 或 "symbol-narrow". 然后参考 Angular 文档寻求帮助,使用此页面上的代码示例修复问题:https://angular.io/api/common/CurrencyPipe
我使用自定义管道(以符号作为参数)解决了问题,因为我需要控制何时以及如何显示符号。
import { Pipe, PipeTransform, Injectable } from '@angular/core';
@Injectable()
@Pipe({ name: '$' })
export class MoneyPipe implements PipeTransform {
transform(value: number, symbol: string = null, decimalDelimiter: string = ",", thousandsDelimiter: string | null = "." ): any {
if(!value) return symbol ? symbol + " -" : "";
let roundValue = value.toFixed(Math.max(0, ~~2));
let valueToReturn = roundValue.replace('.', decimalDelimiter);
if(thousandsDelimiter) valueToReturn = this.setThousandsSign(valueToReturn, thousandsDelimiter);
return symbol ? symbol + " " + valueToReturn : valueToReturn;
}
private setThousandsSign(value: string, delimiter: string): string {
return value.split("").reverse().map((str, index) => {
if(index <= 3) return str;
return (index%3)===0 ? str+delimiter : str;
}).reverse().join("");
}
}
那是在 HTML。
{{order.price | $}}
使用自定义交易品种。
{{order.price | $:'€'}}
您可以用您的货币符号替换 DEFAULT_CURRENCY_CODE 并添加 space。
app.module.ts > 提供商
providers: [ { provide: DEFAULT_CURRENCY_CODE, useValue: 'LKR ' } ],
使用 Angular CurrencyPipe.
{{ money | currency:'USD':'symbol' }}
试试这个
${{amount | number: '2.2'}}
if amount=5
则输出-->.00
if amount=null
则输出-->$
我不知道你的模板,但如果所有问题都是符号,你可以在输入前使用 Material class, matPrefix 并放置你需要的任何符号。
例如
<span matPrefix>$ </span>
<input matInput
type="number"
min="0"
step="0.01"
[value]="price | currency:'':'':'1.2-2'">
我对来自 Angular 的内置 CurrencyPipe 有疑问。
我需要使用 CurrencyPipe 显示货币符号,但我无法使用它,除非我提供输入数字。
因为 CurrencyPipe 使用当前语言环境来获取货币符号,所以我认为输入数字可以是可选的。
当前行为:
{{ 1 | currency:'USD' }} -->
需要的行为:
{{ null | currency:'USD' }} --> $
你们中有人知道默认管道是否可行吗? 谢谢!!
更新Angular8
import { Pipe, PipeTransform } from '@angular/core';
import { CurrencyPipe } from '@angular/common';
@Pipe({ name: 'CustomeCurrency' })
export class CustomCurrencyPipe implements PipeTransform {
constructor(private currencyPipe: CurrencyPipe) { }
transform(value: any, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string {
if (value != null)
return this.currencyPipe.transform(value, currencyCode, display, digitsInfo, locale);
return this.currencyPipe.transform(0, currencyCode, display, locale).split('0.00')[0];
}
}
试试这个简单的自定义货币管道
{{ null | CustomeCurrency }}</p>
import { Pipe, PipeTransform } from '@angular/core';
import { CurrencyPipe } from '@angular/common';
@Pipe({ name: 'CustomeCurrency' })
export class CustomCurrencyPipe implements PipeTransform {
constructor(private currencyPipe: CurrencyPipe) { }
transform(value: any, currency: string, symbol: boolean = false): string {
if (value != null)
return this.currencyPipe.transform(value, currency, symbol);
return this.currencyPipe.transform(0, currency, symbol).split('0.00')[0];
}
}
货币管道已在 Angular v5 中更改。 symbolDisplay 选项(第三个参数)现在是一个字符串而不是布尔值。可接受的值为 "code"、"symbol" 或 "symbol-narrow".
如果您收到错误消息 货币管道已在 Angular v5 中更改。 symbolDisplay 选项(第三个参数)现在是一个字符串而不是布尔值。可接受的值为 "code"、"symbol" 或 "symbol-narrow". 然后参考 Angular 文档寻求帮助,使用此页面上的代码示例修复问题:https://angular.io/api/common/CurrencyPipe
我使用自定义管道(以符号作为参数)解决了问题,因为我需要控制何时以及如何显示符号。
import { Pipe, PipeTransform, Injectable } from '@angular/core';
@Injectable()
@Pipe({ name: '$' })
export class MoneyPipe implements PipeTransform {
transform(value: number, symbol: string = null, decimalDelimiter: string = ",", thousandsDelimiter: string | null = "." ): any {
if(!value) return symbol ? symbol + " -" : "";
let roundValue = value.toFixed(Math.max(0, ~~2));
let valueToReturn = roundValue.replace('.', decimalDelimiter);
if(thousandsDelimiter) valueToReturn = this.setThousandsSign(valueToReturn, thousandsDelimiter);
return symbol ? symbol + " " + valueToReturn : valueToReturn;
}
private setThousandsSign(value: string, delimiter: string): string {
return value.split("").reverse().map((str, index) => {
if(index <= 3) return str;
return (index%3)===0 ? str+delimiter : str;
}).reverse().join("");
}
}
那是在 HTML。
{{order.price | $}}
使用自定义交易品种。
{{order.price | $:'€'}}
您可以用您的货币符号替换 DEFAULT_CURRENCY_CODE 并添加 space。
app.module.ts > 提供商
providers: [ { provide: DEFAULT_CURRENCY_CODE, useValue: 'LKR ' } ],
使用 Angular CurrencyPipe.
{{ money | currency:'USD':'symbol' }}
试试这个
${{amount | number: '2.2'}}
if amount=5
则输出-->.00
if amount=null
则输出-->$
我不知道你的模板,但如果所有问题都是符号,你可以在输入前使用 Material class, matPrefix 并放置你需要的任何符号。
例如
<span matPrefix>$ </span>
<input matInput
type="number"
min="0"
step="0.01"
[value]="price | currency:'':'':'1.2-2'">