组件间共享数据服务
Sharing data service between components
我是 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);
和共享服务:
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 之前
修改您的 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
将提供空值。
我是 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);
和共享服务:
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 之前
修改您的 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
将提供空值。