Angular 如何在不同窗口中的组件之间使用同一个角度服务实例?

Angular 如何在不同窗口中的组件之间使用同一个角度服务实例?,angular,service,Angular,Service,我有一个组件main组件,它需要一个服务myService来http请求一些数据更新行为主体数据。请求完成后,将打开一个新窗口,其中有componentotherComponent,其中将显示来自myService.data的一些信息 但是,otherComponent不会从data接收最新的值-它接收最初设置为的数据 主组件 myService.ts 只有在新窗口中加载otherComponent时,才会出现此问题。当我在同一窗口中加载组件时,它会正确地记录“新数据”。我怀疑这是因为一个新窗口

我有一个组件
main组件
,它需要一个服务
myService
来http请求一些数据更新行为主体
数据
。请求完成后,将打开一个新窗口,其中有component
otherComponent
,其中将显示来自
myService.data
的一些信息

但是,
otherComponent
不会从
data
接收最新的值-它接收最初设置为的
数据

主组件

myService.ts

只有在新窗口中加载
otherComponent
时,才会出现此问题。当我在同一窗口中加载组件时,它会正确地记录
“新数据”
。我怀疑这是因为一个新窗口加载了该应用程序的新版本,从而创建了一个新的
myService
实例,该实例的
数据
值尚未更新

这有什么办法吗?我可以在两个窗口中使用同一个服务实例吗

听起来像是一份

编写一个可以更新本地存储并获取值的服务。类似于下面的代码片段

import { Injectable } from '@angular/core';

@Injectable()
export class LocalStorageService {

  constructor() { }

  setLocalStorage(key, value) {
    localStorage.setItem(key, JSON.stringify(value));
  }

  getLocalStorage(key) {
    return JSON.parse(localStorage.getItem(key));
  };
}
使用此选项,数据将在windows之间可用。正如您所说,当打开一个新窗口时,将创建一个新的angular应用程序实例,以便重置服务数据,因此您可以使用localStorage解决数据丢失问题。下面是一个工作示例

参考:

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;
            })
        )
    }
ngOnInit(){
        this.myService.data.subscribe(value => {
            console.log(value) //console.logs "old data"
        });
import { Injectable } from '@angular/core';

@Injectable()
export class LocalStorageService {

  constructor() { }

  setLocalStorage(key, value) {
    localStorage.setItem(key, JSON.stringify(value));
  }

  getLocalStorage(key) {
    return JSON.parse(localStorage.getItem(key));
  };
}