Angular 角度2管道卡滞原因表达式更改终端检查错误

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

我将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 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;
}