Angular 8 - 如何在具有双向数据绑定的输入中使用管道?

Angular 8 - How to use pipes in an input with 2-way data-binding?

在 Angular 方面我是一个相对的新手,我正在构建一个 Angular 应用程序并希望格式化一个输入字段,用户可以在其中输入他们的收入并且它需要进行格式化,使其前面都有一个 GBP 符号,并用逗号将值分隔成千位。

因此,例如,用户将他们的收入添加为 34000,它将显示为 £34,000

我正在尝试使用管道来帮助我实现这一点,我已经尝试使用 CurrencyPipe 和常规管道,但我遇到了同样的问题。因此,例如,我将使用数字管道:

<input type="number" (change)="getApp1income()" (keyup)="getApp1income()" [(ngModel)]="app1income | number" [ngModelOptions]="{standalone: true}" min="0" step="500" data-number-to-fixed="2" data-number-stepfactor="500" />

但是,这给了我以下错误:

Uncaught Error: Template parse errors:
Parser Error: Cannot have a pipe in an action expression at column 14 in [app1income | number=$event]

我在使用 CurrencyPipe 时也会遇到同样的错误。我认为这与 ngModel 使用 2 向数据绑定这一事实有关,因为我使用的是在别处输入的值。但我似乎根本找不到解决方案,而且我已经在此处和其他地方查看了各种类似的问题。

如有任何帮助,我们将不胜感激。

如果您愿意为此使用 third-party 库,您可以使用 ng2-currency-mask

  1. npm install ng2-currency-mask --save
  2. CurrencyMaskModule 添加到要在其中使用此模块的 imports 数组。
  3. 这样使用:<input currencyMask [(ngModel)]="value" [options]="{ prefix: '£ ', thousands: ',', precision: 0 }"/>

Here's a Working Sample StackBlitz for your ref.

我建议使用 ngx-mask: https://www.npmjs.com/package/ngx-mask
它使用起来非常简单,页面上有很多示例:
https://jsdaddy.github.io/ngx-mask-page/main


在您的情况下,它将是: <input type='text' prefix="£" mask="comma_separator.2" > 然后在您的代码中解析为数字类型