Angular 从 sessionStorage 加载数据时,组件没有从订阅的服务接收数据
Angular component does not receive data from subscribed service when data is loaded from sessionStorage
在我的 angular 应用程序中有一项服务接收对象,将其添加到对象列表,将更新的对象数组保存到 sessionStorage
并将更新的列表发送到另一个应用程序已订阅更改。问题是订阅的组件在用户刷新页面后没有从服务接收数据。我看到该服务已从 sessionStorage
检索数据,更新本地数组并使用 next
将新加载的数据分派给所有订阅者,但是订阅的组件不会触发订阅。
现在输入一些代码:
//some.service.ts
private dataSub = new Subject<Data[]>();
public dataObservable$ = this.dataSub.asObservable();
private data: Data[] = [];
.
.
.
constructor() {
const data = sessionStorage.getItem("data");
if(data){
this.data = JSON.parse(data);
this.dataSub.next(this.data);
}
}
.
.
.
public someFunction(){
sessionStorage.setItem("data", JSON.stringify(this.data));
}
订阅的组件在some.service
中发生变化:
//some.component
private dataSubscription: Subscription = new Subscription();
public data: Data[] = [];
constructor(private someService: SomeService) { }
ngOnInit(): void {
this.dataSubscription = this.someService.dataObservable$.subscribe(newData => {
this.data= newData ;
})
}
Angular 构建这些 类 的顺序是服务,然后是组件。
由于您的主题没有重播值(至少默认情况下),该组件将获得未来值,而不是当前值。这是因为主题是创建、添加和订阅的。您可以尝试使用 BehaviorSubject 或向您的主题添加重播。这样组件在订阅的时候就会得到当前的值。
在我的 angular 应用程序中有一项服务接收对象,将其添加到对象列表,将更新的对象数组保存到 sessionStorage
并将更新的列表发送到另一个应用程序已订阅更改。问题是订阅的组件在用户刷新页面后没有从服务接收数据。我看到该服务已从 sessionStorage
检索数据,更新本地数组并使用 next
将新加载的数据分派给所有订阅者,但是订阅的组件不会触发订阅。
现在输入一些代码:
//some.service.ts
private dataSub = new Subject<Data[]>();
public dataObservable$ = this.dataSub.asObservable();
private data: Data[] = [];
.
.
.
constructor() {
const data = sessionStorage.getItem("data");
if(data){
this.data = JSON.parse(data);
this.dataSub.next(this.data);
}
}
.
.
.
public someFunction(){
sessionStorage.setItem("data", JSON.stringify(this.data));
}
订阅的组件在some.service
中发生变化:
//some.component
private dataSubscription: Subscription = new Subscription();
public data: Data[] = [];
constructor(private someService: SomeService) { }
ngOnInit(): void {
this.dataSubscription = this.someService.dataObservable$.subscribe(newData => {
this.data= newData ;
})
}
Angular 构建这些 类 的顺序是服务,然后是组件。
由于您的主题没有重播值(至少默认情况下),该组件将获得未来值,而不是当前值。这是因为主题是创建、添加和订阅的。您可以尝试使用 BehaviorSubject 或向您的主题添加重播。这样组件在订阅的时候就会得到当前的值。