简体   繁体   English

在Angular中使用管道和ngModel时出错

[英]getting error when using pipes and ngModel in Angular

I got a custom dropdown where value from selected dropdown will bind in input value in my reactive form using ngModel , also I had applied mask in my input fields using pipe, here is all relevant code : 我得到了一个自定义下拉列表,其中所选下拉列表中的value将使用ngModel以反应形式绑定到input值中,而且我已经使用管道在input字段中应用了mask,这是所有相关代码:

html file html文件

<form [formGroup]="creditCardForm" (ngSubmit)="submitCreditCardForm()">
  <input 
     [ngModel]="selectedCard.cardNumberMasked | creditCardMask: true"
     (ngModelChange)="selectedCard.cardNumberMasked = $event"
     type="text"
     formControlName="creditCardNumber">
</form>

ts file ts文件

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

export class MyComponent implements OnInit {
  creditCardForm: FormGroup;

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

mask.pipe.ts 遮罩

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'creditCardMask',
})
export class CreditCardMaskPipe implements PipeTransform {
  transform(value: string, showMask: boolean): string {
    if (typeof value === 'number') {
      value = JSON.stringify(value);
    }

    if (!showMask || (value.length < 16 && value.length < 15)) {
      return value;
    }

    return `${value.substr(0, 4)} ${'\u2022'.repeat(4)} ${'\u2022'.repeat(
      4
    )} ${value.substr(value.length - 4, value.length)}`;
  }
}

I know using ngModel in reactive form is deprecated but I need to use it for binding value from selected dropdown, this is the error I get in my console: 我知道已弃用以反应形式使用ngModel ,但我需要将其用于绑定所选下拉列表中的值,这是我在控制台中得到的错误:

ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. 错误错误:ExpressionChangedAfterItHasBeenCheckedError:检查表达式后,表达式已更改。 Previous value: 'undefined: 512345444444444'. 先前值:“未定义:512345444444444”。 Current value: 'undefined: 5123 •••• •••• 4444'. 当前值:“未定义:5123••••••••4444”。

error 错误 在此处输入图片说明

any suggestion on how to solve this or any better practice ? 关于如何解决这个问题或任何更好的做法的任何建议? thanks 谢谢

You shouldn't use ngModel along side formControlName , for using pipe you can try using [value] and then assign formControl value to it to update value every time you insert new value to input: 你不应该使用ngModel沿侧formControlName,使用管道可以尝试使用[value] ,然后分配formControl价值给它的每次插入新值输入时间更新值:

<form [formGroup]="creditCardForm" (ngSubmit)="submitCreditCardForm()">
  <input 
     [value]="creditCardForm.get('creditCardNumber').value | creditCardMask: true"
     type="text"
     formControlName="creditCardNumber">
</form>

DEMO 🚀🚀 演示🚀🚀

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM