Angular 4 - 如何在输入类型

时间:2018-01-18 12:39:21

标签: angular html-input angular-pipe angular2-ngmodel

我有一个HTML输入:

<input [(ngModel)]="item.value" name="inputField" type="text" />

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

.... [(ngModel)]="item.value | currency:'USD':true" .....

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

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

上述代码会导致以下错误。

  

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

3 个答案:

答案 0 :(得分:8)

以下是使用货币管道的正常工作:

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

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

答案 1 :(得分:4)

我认为这是一个解决方案:

def onOut():
    return TestEnvironment.__dict__['_on_out']

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

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

答案 2 :(得分:0)

我认为您需要将一些答案与这样的小改动结合起来 -

HTML:

<input
  matInput 
  type="text"
  placeholder="Test Price"
  [ngModel]="testPrice | currency:'USD'"
  [ngModelOptions]="{updateOn:'blur'}"
  (ngModelChange)="updateCurrencyField($event)"
/>

TS:

updateCurrencyField(value: string): void {
  const onlyNumbers = value.replace(/[^\d.-]/g, '');
  this.valueChange.emit(Number(onlyNumbers));
}