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