如何使用无角形式的反应形式控件来格式化输入?

时间:2019-05-17 06:06:14

标签: angular format angular-reactive-forms

我有一个类似下面的输入,以一个反应形式控件为界:

  <mat-form-field appearance="fill" floatLabel="always" fxFlex>
    <mat-label>My field</mat-label>
    <input
      matInput
      #input="matInput"
      [formControl]="amountControl"
      [errorStateMatcher]="customMatcher"
    />
    <mat-error *ngIf="amountControl?.invalid">{{ getErrorMessage$() | async }}</mat-error>
  </mat-form-field>

现在,在用户输入值之后,可能需要使用模糊或自定义键盘快捷键对值进行格式化,然后将其填充回html输入字段,并使用格式化后的值更新到有界表格控件中。

我当时在考虑使用管道,但是,这似乎仅对更改值的显示方式有用,而不能将其保存回支持的FormControl。

什么是正确的方法?

1 个答案:

答案 0 :(得分:0)

我会这样:
   HTML:

<input
          matInput
          #input="matInput"
          [formControl]="amountControl"
          [errorStateMatcher]="customMatcher"
          (blur) = "transform()"
 />

TS:

  amountControl = new FormControl('');
  transform(){
    let transformValue = this.amountControl.value - 5; // your pipe here
    this.amountControl.setValue(transformValue);
  }

该值将随您键入而改变,但是变换将在模糊时发生,如果您希望该值仅在模糊时改变,则可以使用以下方法:

amountControl = new FormControl('', {updateOn: 'blur'});

编辑:StackBlitz示例