Angular 在组件之间共享数据服务
我是新手,有个问题。我有两个组件A和B以及SharedDataService。 在组件A中,我从REST服务获取数据,为了与组件B共享这些数据,我想使用SharedDataService A部分:Angular 在组件之间共享数据服务,angular,angular-services,Angular,Angular Services,我是新手,有个问题。我有两个组件A和B以及SharedDataService。 在组件A中,我从REST服务获取数据,为了与组件B共享这些数据,我想使用SharedDataService A部分: let data: Data; this.restService.getData().subscribe(data => { this.sharedService.addSharedData(data); } , error =&
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);
和共享服务:
public sharedData: Data;
constructor() { }
addSharedData(data : Data) {
this.sharedData = data;
}
getSharedData() : Observable<Data> {
return of (this.sharedData);
}
公共共享数据:数据;
构造函数(){}
addSharedData(数据:数据){
this.sharedData=数据;
}
getSharedData():可观察{
归还(本.共享数据);
}
在调试期间,我发现组件B试图比组件A早几次获取数据。它是如何工作的?我认为subcribe总是在数据发生变化时获取数据。但为什么现在它不起作用
另外,共享数据效果很好。例如,如果我把这个.sharedService.addSharedData(fakedata)放在下面,它就会工作;在组件A中重新订阅服务之前修改您的
共享服务
,以利用行为主体
和反应式编程的威力
private sharedData: BehaviorSubject<Data> = new BehaviorSubject<Data>(null);
addSharedData(data: Data) {
this.sharedData.next(data);
}
getSharedData(): Observable<Data> {
return this.sharedData.asObservable();
}
private-sharedData:BehaviorSubject=new-BehaviorSubject(null);
addSharedData(数据:数据){
this.sharedData.next(数据);
}
getSharedData():可观察{
返回此.sharedData.asObservable();
}
通过这种方式,SharedService
将无缝跟踪您的数据,并在新值到达时通知所有getSharedData()
订阅addSharedData(数据:数据)
另外,通过使用
BehaviorSubject
而不是Subject
,任何新订阅都将收到上一次的数据。但请注意,在使用addSharedData
方法getSharedData
到达某些数据之前,将提供空值。修改您的共享服务
以利用行为主体
和反应式编程的功能
private sharedData: BehaviorSubject<Data> = new BehaviorSubject<Data>(null);
addSharedData(data: Data) {
this.sharedData.next(data);
}
getSharedData(): Observable<Data> {
return this.sharedData.asObservable();
}
private-sharedData:BehaviorSubject=new-BehaviorSubject(null);
addSharedData(数据:数据){
this.sharedData.next(数据);
}
getSharedData():可观察{
返回此.sharedData.asObservable();
}
通过这种方式,SharedService
将无缝跟踪您的数据,并在新值到达时通知所有getSharedData()
订阅addSharedData(数据:数据)
另外,通过使用
BehaviorSubject
而不是Subject
,任何新订阅都将收到上一次的数据。但请注意,在使用addSharedData
方法getSharedData
到达某些数据之前,将提供空值。尝试使用来自服务的模板(html)中相同的可观察数据,使用模板中的纯管道来显示它们。尝试使用来自服务的模板(html)中相同的可观察数据,在模板中使用纯管道来显示它们。同样的问题。我想这是因为addSharedData方法中的数据没有改变,我更新了我的答案。当我们使用主题时
新订阅将不会收到任何以前的数据BehaviorSubject
解决了这个问题。同样的问题。我想这是因为addSharedData方法中的数据没有改变,我更新了我的答案。当我们使用主题时
新订阅将不会收到任何以前的数据BehaviorSubject
解决了这个问题。