У меня есть компонент mainComponent
, который запрашивает услугу myService
, чтобы http запросить обновление данных для объекта BehaviorSubject data
.Как только запрос завершен, открывается новое окно с компонентом otherComponent
, в котором будет отображаться некоторая информация из myService.data
.
Однако otherComponent
не получает новейшее значение из data
- он получает то, что изначально установлено для data
.
mainComponent.ts
open() {
this.myObs = this.myService
.fetchObservable()
.subscribe(() => {
this.myService.data.subscribe(value => {
console.log(value) //logs "new data"
});
this.nativeWindow.open('workflow-editor'); //occurs after data has been updated
})
myService.ts
public data: BehaviorSubject<string> = new BehaviorSubject<string>("old data");
fetchObservable(){
return this.http.get('./url')
.pipe(
map(res => {
this.data.next("new data");
console.log(this.data.value) //console.logs "new data"
return res;
})
)
}
otherComponent.ts
ngOnInit(){
this.myService.data.subscribe(value => {
console.log(value) //console.logs "old data"
});
Эта проблема возникает только при загрузкеotherComponent
в новом окне.Когда я загружаю компонент в том же окне, он правильно записывает "new data"
.Я подозреваю, что это потому, что новое окно загружает новую версию приложения, создавая, таким образом, новый экземпляр myService
- тот, у которого не обновлено значение data
.
Есть ли способ обойти это?Могу ли я использовать один и тот же экземпляр службы в двух окнах?