Angular 4 - 如何在输入类型中使用货币管道

Mah*_*kos 9 html-input angular2-ngmodel angular-pipe angular

我有一个HTML输入:

<input [(ngModel)]="item.value" name="inputField" type="text" />
Run Code Online (Sandbox Code Playgroud)

我想格式化它的值并使用现有的管道:

.... [(ngModel)]="item.value | currency:'USD':true" .....
Run Code Online (Sandbox Code Playgroud)

此外,我试图以下面的方式使用它,但它第一次给我理想的输出并在更新字段时显示错误:

<input type="text" 
   [ngModel]="item.value | currency:'USD':true" 
   (ngModelChange)="item.value=($event)">
Run Code Online (Sandbox Code Playgroud)

上面的代码导致以下错误.

ERROR错误:InvalidPipeArgument:''对于管道'CurrencyPipe'
在invalidPipeArgumentError(common.es5.js:2610)
处于formatPumber.webpackJsonp
.../../../common /的formatNumber(common.es5.js:3176)LandingPageComponent.webpackJsonp上的@ angular/common.es5.js.CurrencyPipe.transform(common.es5.js:3350)
.../../../../../src/app/guest-handling/landing 在handleEvent的object.eval
[as handleEvent](LandingPageComponent.html:38)的-page/landing-page.component.ts.LandingPageComponent.transformAmount(landing-page.component.ts:54)
(core.es5.js:12014) )
在callWedDebugContext(core.es5.js:13475)
的object.debugHandleEvent [as handleEvent](core.es5.js:13063)
at dispatchEvent(core.es5.js:8607)
at core.es5.js:9218

小智 9

以下是使用货币管道的方法:

<input matInput type="text" placeholder="Test Price" [ngModel]="testPrice | currency:'USD':'symbol':'2.2'" [ngModelOptions]="{updateOn:'blur'}" 
      (ngModelChange)="testPrice=$event"/>
Run Code Online (Sandbox Code Playgroud)

基本上使用ngModelOptions来更新模糊允许在输入字段中键入时不添加0.


Mat*_*Dev 6

我认为这是适合您的解决方案:

<input type="text" 
   [ngModel]="item.value | currency:'USD':true" 
   (ngModelChange)="item.value=currencyInputChanged($event)">
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器中。货币标记来自输入值:

  currencyInputChanged(value) {
    var num = value.replace(/[$,]/g, "");
    return Number(num);
  }
Run Code Online (Sandbox Code Playgroud)

  • 这*几乎*有效,但如果你真的在浏览器中运行它,它会有意想不到的行为,这是由于`CurrencyPipe`立即添加额外的`0`,然后开始添加新数字。 (2认同)