如果value是字符串而不是int或float,如何告诉angular(2)货币管道显示的情况

Ani*_*Das 5 angular2-pipe angular

货币管应该足够聪明来处理string,float,int,自动等.

如果传递值string与否int或者float,就应该什么都不做,因为它是显示传递的值.并且只显示格式化值,如果是intfloat.

它发生在angularJs但没有发生角度(2)

如何告诉货币管道以防万一string,如果它是一个decimal值,则进行货币格式化.我期待下面的东西.

<div>Money:{{'xxx/vv/cc' | currency:'USD':true:'1.2-2'}}</div> 应该显示 xxx/vv/cc

<div>Money: {{''11.99'' | currency:'USD':true:'1.2-2'}}</div> 应显示$11.99- 包含$符号.

但它没有发生.我得到的错误是caused by: Invalid argument 'Included' for pipe 'CurrencyPipe'

我认为它默认发生在angularjs中,但在angular2中它不会发生defalut.

Bee*_*ice 11

您可以使用三元运算符a ? b : c来显示b何时a是真实的,但c另外显示.

首先在组件中有一个函数,该函数在true值为数字时返回.

零件

isNumber(e) {return typeof e === 'number'}
Run Code Online (Sandbox Code Playgroud)

然后使用它来确定是将值发送到货币管道还是直接打印

模板

<div>
    {{ isNumber(money) ? (money|currency:'USD':true:'1.2-2') : money }}  
</div>
Run Code Online (Sandbox Code Playgroud)

现场演示


Est*_*ask 6

该手册明确声明它接受数字表达式,而不是其他:

number_expression | 货币[:CURRENCYCODE [:symbolDisplay [:digitInfo]]]

管道非常简单,可以扩展和使用,而不是CurrencyPipe符合预期的行为:

const _NUMBER_FORMAT_REGEXP = /^(\d+)?\.((\d+)(-(\d+))?)?$/;

@Pipe({name: 'currency'})
export class LooseCurrencyPipe extends CurrencyPipe {
  transform(value: any, currencyCode: string, symbolDisplay: boolean, digits: string): string {
    if (typeof value === 'number' || _NUMBER_FORMAT_REGEXP.test(value)) {
      return super.transform(value, currencyCode, symbolDisplay, digits);
    } else {
      return value;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

要创建具有不同名称的新管道,CurrencyPipe可以将其注入自定义管道:

@Pipe({name: 'looseCurrency'})
export class LooseCurrencyPipe implements PipeTransform {
  constructor(private _currencyPipe: CurrencyPipe) {}

  transform(value: any, currencyCode: string, symbolDisplay: boolean, digits: string): string {
    if (typeof value === 'number' || _NUMBER_FORMAT_REGEXP.test(value)) {
      return this._currencyPipe.transform(value, currencyCode, symbolDisplay, digits);
    } else {
      return value;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

为了CurrencyPipe通过DI注入,应该另外添加到模块提供者:

declarations: [LooseCurrencyPipe, ...],
providers: [CurrencyPipe, ...],
Run Code Online (Sandbox Code Playgroud)