出于学习目的,我问这个问题。这是我的服务:
export class HomeService {
private generalstatistics = new ReplaySubject<object>();
constructor(
private http: HttpClient
) {
this.data();
}
public get generalStatistics(): Observable<object> {
return this.generalstatistics.asObservable();
}
data() {
this.http.get<any>(`${environment.apiUrl}/home/`)
subscribe(data => {
this.generalstatistics.next(data);
});
}
}
这是我的第一个订阅。然后,在需要该数据的组件中的某处,我具有以下内容:
constructor(private dataSvc: HomeService) {
this.getData();
}
getData() {
this.dataSvc.generalStatistics
.subscribe(data => {
this.source = data;
});
}
我有第二个订阅。因此,仅出于学习目的,是否可以避免两次订阅?
谢谢
答案 0 :(得分:1)
您应该在组件内部进行订阅,而不是在服务内部进行订阅。
例如:
data() {
return this.http.get<any>(`${environment.apiUrl}/home/`)
});
并因此在您需要的任何地方进行订阅!
在组件内部,例如:
this.homeservice.data().subscribe(...)
如果这样做,将降低复杂性并减少代码重复。
希望有帮助!