在Angular中如何使用逗号(仅两个)和数字作为逗号?

时间:2019-03-28 11:48:01

标签: angular

我必须用两位小数和意大利格式来格式化数字:

  

1.111.111,00

我有两个绑定的输入:

<input type="number" [ngModel]="praticaSelezionata.Importo | number:'1.2-2':'it-IT'"
    (ngModelChange)="praticaSelezionata.Importo=$event" formControlName="importo"
    [disabled]="formDisabilitato"
    class="input-sm form-control mr-sm-4 inputRightFormat mb-sm-1"
    style="height:34px;width:40%;margin-right:3px !important" id="importo" disabled>

app.module.ts中,我设置了:

import localeIt from '@angular/common/locales/it';
import { registerLocaleData } from '@angular/common';

registerLocaleData(localeIt);

providers:[{ provide: LOCALE_ID, useValue: 'it-IT'}...

但是当我在输入字段中输入数字时,我会收到此错误

InvalidPipeArgument: '10,13 is not a number' for pipe 'DecimalPipe'

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'undefined: 10.1311'. Current value: 'undefined: 10,13'

和警告

The specified value "10,13" is not a valid number. The value must match to the following regular expression: -?(\d+|\d+\.\d+|\.\d+)([eE][-+]?\d+)?

我是新手,可以帮我吗?谢谢

1 个答案:

答案 0 :(得分:0)

praticaSelezionata.Importo是一个值为“ 10,13”的字符串。这不是数字。您可以做几件事:

更改获取数据的方式。我怀疑有一些API。这需要返回10.13,而不是"10,13"

收到数据后解析该值,以将字符串逗号数字转换为普通数字。

在号码管道前面使用管道:

@Pipe({
  name: 'stringNr'
})
export class StringNrPipe implements PipeTransform {
  transform(stringNr: string | number): number {
    if (typeof stringNr === 'string') {
      return Number.parseFloat(stringNr.replace(',', '.')) || 0
    }

    return stringNr || 0;
  }
}