angular - 在 Angular 服务的 BehaviorSubject 中编辑对象的一部分
问题描述
我有一个下载文件的应用程序。我想要的是一个单独的屏幕,显示每个文件的下载进度。
这是我下载绘图文件的功能(这是使用 Cordova FileTransferObject 类):
getDownloadDrawingObservable(drawing) {
let tempFTO = this.fileTransfer.create();
tempFTO.onProgress((progressEvent) => {
if (progressEvent.lengthComputable) {
this.ngZone.run(() => {
// loading.setContent('Downloading drawing ' + progress + '%')
let progress = Math.round(progressEvent.lengthComputable ? progressEvent.loaded * 100 / progressEvent.total : 0);
drawing["Progress"] = progress + "%";
console.log(progress + "%")
})
} else {
}
})
return Observable.fromPromise(tempFTO.download(drawing["URL"], this.file.dataDirectory + drawing["DrawingNo"] + ".pdf", true, this.getDrawingRequestHeaders))
// return tempFTO.download(URL, this.file.dataDirectory + drawingNo + ".pdf", true, this.getDrawingRequestHeaders)
}
我在想的是创建一个单独的屏幕,显示当前正在下载哪些文件以及它们的进度。
我正在考虑使用行为主题来执行此操作。我的想法是我将订阅“我的下载”屏幕上的行为主题,并且主题的内容将在下载和进度逻辑中保持最新。
但是在解决这个问题时,我意识到要做到这一点,您必须创建一个对象,如下所示(绘图名称,下载进度):
{drawing1: 55, drawing2: 30}
并不断更新 BehaviorSubject 内对象的特定部分。
我的问题是;这是正确的吗?这是最好的方法吗?您甚至可以只更新 BehaviorSubject 对象的一部分并使用next()来更新屏幕上的值吗?
任何帮助,将不胜感激。
谢谢,本。
解决方案
我一直在寻找答案,但你给了我一个想法,我希望它对你有用:
editDisplayName(displayName: string) {
this.current$.next({...this.current$.getValue(), displayName})
}
推荐阅读
- javascript - 从 fabric.js 画布中清除 PATH
- web2py - WEB2PY DAL 如何创建与字段值列表匹配的查询
- vue.js - Nuxt.js 基于角色的服务器渲染
- javascript - 点击功能需要额外点击才能完全执行。这一切都应该一键发生
- c# - 使用 Linq 向上/向下移动 Xml 节点
- amazon-web-services - AWS CloudFormation Fn::Join - 转义单引号
- c++ - Python 的 C++ 枚举
- javascript - Google API 不会翻译外文字母。
- node.js - AJAX 删除问题
- apache - Apache忽略AllowOverride = All和Rewrite模块启用的重写规则