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