获取数据需要两个子脚本

时间:2019-12-22 14:41:23

标签: angular typescript rxjs

出于学习目的,我问这个问题。这是我的服务:

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;
 });
}

我有第二个订阅。因此,仅出于学习目的,是否可以避免两次订阅?

谢谢

1 个答案:

答案 0 :(得分:1)

您应该在组件内部进行订阅,而不是在服务内部进行订阅。

例如:

data() {
    return this.http.get<any>(`${environment.apiUrl}/home/`)
});

并因此在您需要的任何地方进行订阅!

在组件内部,例如:

this.homeservice.data().subscribe(...)

如果这样做,将降低复杂性并减少代码重复。

希望有帮助!