Я пытаюсь получить текущее значение BehaviorSubject
без подписки на него, потому что мне нужно внести некоторые изменения впоследствии, без изменений, отражающих в реальном времени, из-за специфика c требование. Я использую getValue()
.
Пример BehaviorSubject
значение:
{
ID_123: {
logs: [
{
id: 1,
record_id: 'ID_123',
data: { complete: false }
action: 'Modified',
description: 'Modified filename',
}
]
}
}
Класс обслуживания:
private logs$ = new BehaviorSubject<any>(null);
private logsDataStore = {};
logsData = this.logs$.asObservable();
...
getData(id) {
if (this.logsDataStore[id] !== undefined) {
return this.logs$.getValue();
}
}
Я вызываю getData()
изнутри компонента, когда нажимается кнопка для визуализации logs
записей.
id = 'ID_123';
onClick() {
this.logsData = Object.assign({}, this.service.getData([this.id])[this.id]);
}
Отображение каждой logs
записи:
<div *ngFor="let log of logsData.logs" class="log">
<a *ngIf="!log.data.complete" (click)="markComplete(log.record_id, log.id, log.data)">
Mark Complete
</a>
</div>
markComplete(recordId, id, data) {
let dataClone = Object.assign({}, data);
dataClone.complete = true;
this.service.updateLog(recordId, id, dataClone);
}
Вернуться к классу обслуживания:
updateLog(recordId: string, id: string, newValues: object) {
const selectedRecord = this.logsDataStore[recordId];
if (selectedRecord !== undefined) {
if (selectedRecord.logs && selectedRecord.logs[id]) {
let selectedLogEntry = selectedRecord.logs[id];
Object.keys(newValues).forEach(
(logKey) => {
selectedLogEntry[logKey] = newValues[logKey];
}
);
}
}
// this.logs$.next(Object.assign({}, this.logsDataStore));
}
Проблема :
Каким-то образом ссылка Mark Complete исчезает сразу же, когда вы нажимаете на нее, даже если я не подписался на услугу и клонировал результаты из getData()
перед их использованием? Как будто ссылка на объект из BehaviorSubject
была сохранена?
Чего мне не хватает?