angular - 异步调用后,在角度 4 中调用 changeDetectorRef 停止工作
问题描述
我在一个角度组件中有以下代码,它是文件上传进度事件的事件处理程序:
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 });
}
我是角度的新手,我怀疑这与角度区域有关。
谁能告诉我这里发生了什么?
解决方案
推荐阅读
- python - 如何从 webpy html 文件中访问列表的字典项
- javascript - 如何在 JS 中将对象更改为数组
- python - 在 Google Colab 中,我使用 Pickle Library 创建了一个文件,但在 Google Drive 中找不到它
- mysql - 在nodejs中编写多个sql查询
- visual-studio - Typescript 的 npm、NuGet 和 Marketplace 下载选项有什么区别?
- sql - 将 postgres 交叉表查询转换为 TSQL
- apache-spark - 如何在火花流上写入kafka时使数据帧上的空值可用
- javascript - 基于其他回调函数的函数... react-native
- php - 将 foreach 循环项从刀片传递到 vue 并获取每个循环项
- c - 使用指针作为函数参数读取并显示姓名和年龄