Редактировать часть объекта в BehaviorSubject в службе Angular

У меня есть приложение, которое загружает файлы. То, что я хочу, это отдельный экран, который показывает прогресс загрузки каждого файла.

У меня есть функция, которая загружает файл чертежа (используется класс 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}

И постоянно обновлять определенную часть объекта в Behavior Subject.

Мой вопрос (ы) являются; это правильно? Это лучший способ сделать это? Можете ли вы просто обновить часть объекта Behavior Subject и next(), чтобы обновить значение на экране?

Любая помощь будет оценена.

Спасибо, Бен.

1 ответ

Я искал ответ, но вы дали мне идею, которая, надеюсь, сработает для вас:

        editDisplayName(displayName: string) {
    this.current$.next({...this.current$.getValue(), displayName})
  }
Другие вопросы по тегам