angular - 如何在 Angular 5 响应式(Reactive)表单输入中使用管道

标签 angular angular-reactive-forms angular-pipe

我正在尝试弄清楚如何在响应式(Reactive)表单中使用管道,以便将输入强制转换为货币格式。我已经为此创建了自己的管道,我已经在代码的其他区域进行了测试,所以我知道它可以作为一个简单的管道使用。我的管道名称是“udpCurrency”

关于堆栈溢出,我能找到的最接近的答案是:Using Pipes within ngModel on INPUT Elements in Angular2-View然而,这在我的情况下不起作用,我怀疑这与我的表单是 react 性的事实有关

这里是所有相关代码:

模板

<form [formGroup]="myForm" #f="ngForm">
  <input class="form-control col-md-6" 
    formControlName="amount" 
    [ngModel]="f.value.amount | udpCurrency" 
    (ngModelChange)="f.value.amount=$event" 
    placeholder="Amount">
</form>

组件

import { Component, OnInit, HostListener } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';

export class MyComponent implements OnInit {
  myForm: FormGroup;

  constructor(
    private builder: FormBuilder
  ) {
    this.myForm = builder.group({
      amount: ['', Validators.required]
    });
  }    
}

错误:

ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'undefined: '. Current value: 'undefined: undefined'

最佳答案

这就是混合使用模板驱动表单和响应式表单时可能发生的情况。你有两个相互争斗的绑定(bind)。选择模板驱动或 react 形式。如果你想走 react 路线,你可以为你的管道使用 [value]...

请注意,此管道仅用于在 View 中显示所需的输出。

<form [formGroup]="myForm">
  <input 
    [value]="myForm.get('amount').value | udpCurrency"
    formControlName="amount" 
    placeholder="Amount">
</form>

关于angular - 如何在 Angular 5 响应式(Reactive)表单输入中使用管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49522542/

相关文章:

javascript - 获取被点击的特定按钮的 ID。

javascript - 类型错误 : Cannot read property 'config' of null at Class. 运行〜/node_modules/angular-cli/tasks/serve.js:22:61

angular - Electron Angular 播放静态音频文件

angular - 取消选中 Angular 7 中表单组中的所有框

Angular - 将管道作为变量传递

angular - 在 Angular 2 中将对象传递给 Pipe 而不是键

Angular 不是已知元素错误

html - &lt;input&gt; 上的 Angular FormControl 显示 [object Object]

angular6 - Angular 6 react 形式。选择的表单数组

javascript - Angular2 转义斜线管道