检查后表达式已更改-角度

时间:2019-01-02 21:13:52

标签: javascript html angular typescript

当我使用(更改)操作方法调用服务时,出现此错误:

  

错误错误:ExpressionChangedAfterItHasBeenCheckedError:表达   检查后已更改。先前的值:'ng-untouched:   真正'。当前值:“ ng-untouched:false”

我的代码:

onChange(event) { 

  const messageToDisplay = "Message test";
  this.popinService.open(messageToDisplay).subscribe((result: ConfirmPopinResultType) => {
    if (result === ConfirmPopinResultType.CONFIRM) {
      console.log("test");
    }
  });        
}

onChange是输入反应形式(选择下拉列表)上的事件处理程序

<form [formGroup]="poolForm"> <select id="pool-select" #item (change)="item.value = onChangePool(item.value)" formControlName="item"> <option *ngFor="let item of items" [value]="item.name">{{ item.name }}</option> </select> </form> 

当我在Change事件处理程序上调用poppin服务时会发生异常错误(显示带有两个按钮的确认和取消弹出窗口)

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您正在听DOM元素事件。

(change)="onChange(item.value)"

并且您收到有关Angular表单的错误。

  

先前值:“ ng-untouched:true”。当前值:“ ng-untouched:false”

这两个冲突,因为ngModel正在跟踪对表单组件的更改。 Angular Forms使用(ngModelChange)来通知组件更改,而Angular Reactive Forms使用valueChanges观察对象。

您尚未共享附加了(change)事件处理程序的位置,但显然在ngModel还在使用的表单输入中。

您应该使用(ngModelChange)而不是(change)