我在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 });
}
我刚开始接触角,我怀疑这与角区域有关。
有人能启发我这里发生的事情吗?