异步调用后,对角度4中的changeDetectorRef的调用停止工作

时间:2019-02-19 08:10:19

标签: angular

我在angular组件中有以下代码,它是文件上传进度事件的事件处理程序:

progressEvent(evt: TransferProgressEvent) {
  const percentage = evt.loadedBytes === 0 ? 0 : Math.ceil((evt.loadedBytes / this.control.controls.file.size) * 100);

  this.control.controls.progress.setValue(`${evt.loadedBytes}%`);

  this._changeDetectorRef.detectChanges();
}

我正在使用onPush更改检测,我注意到一些奇怪的行为。

事件处理程序被调用,但进度未更新。

在调试此功能时,我注意到,一旦调用async函数,this._changeDetectorRef.detectChanges();就不再起作用。

此代码演示了这一点:

async upload(file: FileToUpload, options?: IUploadToBlockBlobOptions): Promise<UploadResponse> {
  const blobName = file.blobName;

  // THIS WILL CAUSE THE PROGRESS TO BE UPDATED
  file.progressEvent({ loadedBytes: 50 });

  const blockBlobURL = await this.getSasUrl(blobName);

  // NO UPDATE WILL HAPPEN AFTER ASYNC CALL
  file.progressEvent({ loadedBytes: 100 });
}

我刚开始接触角,我怀疑这与角区域有关。

有人能启发我这里发生的事情吗?

0 个答案:

没有答案