Вот код, который у меня уже есть:
device.service.ts
import {Injectable} from '@angular/core';
import {BehaviorSubject} from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class DeviceService {
deviceList: any;
private deviceListSource = new BehaviorSubject(this.deviceList);
currentDeviceList = this.deviceListSource.asObservable();
constructor(){}
getDevices(): void {
this.http.get<any>('https://........')
.subscribe(data => {
this.deviceListSource.next(data.data);
}, error => console.log('Could not GET devices.'));
}
И мой компонент диалога выглядит так:
devices.component.ts
ngOnInit() {
this.deviceService.getDevices();
this.deviceService.currentDeviceList.subscribe(data => {
console.log(data)
});
}
Это прекрасно подходит для разделения некоторых значений между несколькими компонентами.Когда я закрываю диалог (то есть devices.component.ts
) и снова открываю его без перезагрузки всей страницы, команда console.log(data)
выполняется столько раз, сколько я уже открывал / закрывал диалог.Поэтому, когда я открываю диалог, он подписывается на все значения, которые были добавлены сервисом .next()
одно за другим.Но я хочу, чтобы диалог только подписывался на последнее добавленное сервисом значение.
Как я понял, BehaviorSubject
именно для этого варианта использования.Я что-то пропустил?Или есть другой (лучший) способ добиться этого?