我是Angular的新手,有问题。我有两个组件A和B。还有SharedDataService。 在组件A中,我从REST服务获取数据,并与组件B共享此数据,我想使用SharedDataService。
组件A:
let data: Data;
this.restService.getData().subscribe(data =>
{
this.sharedService.addSharedData(data);
} , error => console.error(error));
组件B:
let sharedData: Data;
this.SharedService.getSharedData()
.subscribe(ds => sharedData = ds);
和SharedService:
public sharedData: Data;
constructor() { }
addSharedData(data : Data) {
this.sharedData = data;
}
getSharedData() : Observable<Data> {
return of (this.sharedData);
}
在调试过程中,我发现组件B试图比组件A放置数据的时间早几倍。怎么运行的?我认为,如果更改,订阅者总是会获取数据。但是为什么现在不起作用?
P.S。共享数据效果很好。例如,如果我把this.sharedService.addSharedData(fakedata);在组件A中的restService订阅之前
答案 0 :(得分:2)
修改您的SharedService
,以利用BehaviorSubject
和反应式编程的强大功能。
private sharedData: BehaviorSubject<Data> = new BehaviorSubject<Data>(null);
addSharedData(data: Data) {
this.sharedData.next(data);
}
getSharedData(): Observable<Data> {
return this.sharedData.asObservable();
}
通过这种方式SharedService
将无缝跟踪您的数据,并在getSharedData()
到达一个新值时通知所有addSharedData(data: Data)
订阅
也可以使用BehaviorSubject
代替Subject
,任何新的订阅都将接收到最后的先前数据。但是请注意,在addSharedData
方法到达某些数据之前,getSharedData
将提供空值。