Angular 6: ExpressionChangedAfterItHasBeenCheckedError 由 select 下拉事件触发

Angular 6: ExpressionChangedAfterItHasBeenCheckedError triggered from select drop-down event

What code changes can remedy the Error described below ?

用例

下拉输入 UI 受到保护,不会通过模式意外更改所选值。但是,连接到下拉列表的事件(单击、焦点或其他)会导致 ExpressionChangedAfterItHasBeenCheckedError,在 Chrome 开发模式的控制台中观察到。

观测结果

单击下拉菜单时,抛出 ExpressionChangedAfterItHasBeenCheckedError(请参阅控制台)

预期结果

单击下拉菜单时,模式打开时没有错误

演示

A link 在 stackblitz

中演示

备注

What code changes can remedy the Error described below ?

像这样的代码应该可以帮到你:

<select 
  [(ngModel)]="building.venueId"
  #ngModel="ngModel"
  ^^^^^^^^^^^^^^^^^^
  get hold of NgModel instance
  ...
  (click)="ngModel.control.markAsTouched(); confirmChangeItem(building.venueId)">
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
           and prepare FormControl to the changes

Forked Stackblitz

更新

我忘了说在这种情况下你可以删除 cdRef.detectChanges 和微任务所以我很高兴知道你自己猜到了