Angular 角度2管道卡滞原因表达式更改终端检查错误
我将Angular 2项目更新为Angular 4。我正在使用下面的管道Angular 角度2管道卡滞原因表达式更改终端检查错误,angular,angular-pipe,Angular,Angular Pipe,我将Angular 2项目更新为Angular 4。我正在使用下面的管道 <input type="text" class="form-control" [ngModel]="customerSearchText | isnumber" (ngModelChange)="customerSearchText=$event"> isnumber.pipe @Pipe({ name: 'isnumber'}) export class IsNumberPipe implements
<input type="text" class="form-control" [ngModel]="customerSearchText | isnumber" (ngModelChange)="customerSearchText=$event">
isnumber.pipe
@Pipe({ name: 'isnumber'})
export class IsNumberPipe implements PipeTransform {
transform(val: string): any {
if(!val) return '';
val=val.toString();
return WrappedValue.wrap(val.replace(/\D/g, ''))
}
}
当我像这样使用时,我会出错
Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '[object Object]'. Current value: '4'
当我从输入中删除管道时,错误消失了。但我想控制的是输入数字
如何解决此问题?我认为这是由于您立即分配了
(ngModelChange)
事件。尝试调用组件中定义的函数,而不是直接在该事件的模板中进行赋值,如下所示
在模板中
<input type="text" class="form-control" [ngModel]="customerSearchText | isnumber" (ngModelChange)="inputChanged($event)">
希望能有帮助
如果它没有修复,那么尝试使用WrappedValue.wrap在管道中包装
'
(空字符串)return
,就像在return WrappedValue.wrap('')中一样
什么是WrappedValue.wrap
?看起来它可能与此错误有关:您第一次收到错误是什么时候。在页面加载时还是在输入内容后?原因错误显示当前值为4
<input type="text" class="form-control" [ngModel]="customerSearchText | isnumber" (ngModelChange)="inputChanged($event)">
inputChanged(value: string): void {
this.customerSearchText = value;
}