所以我想知道将从API端点重试的数据传递到另一个组件而不再次请求数据的最佳方法是什么?因此,据我所知,我可以使用两个组件之间共享的服务来实现这一点,但我什么时候应该在服务中存储数据?在这种情况下,最佳做法是什么?
如果您需要在多个组件之间共享数据,您应该使用一个服务,正如您已经说过的那样。
但是您不应该将数据存储在组件中。该服务应负责请求和存储数据。
每个组件都会向服务请求数据。该服务将执行实际的HTTP调用或从其本地缓存返回数据。要做到这一点,请确保您有一个服务实例(即在app.module中,在providers部分注册它(。
将BehaviorSubject导入服务文件(例如:ApiProvider.ts(
import { Subject } from 'rxjs/Subject';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
创建所需变量
public dataSource = new BehaviorSubject(null);
public dataSourceChanges$ = this.dataSource.asObservable();
一旦收到Api响应,调用下面的方法。这将向曾经订阅的组件发送数据
changeInDatatatus(data:any): void {
this.selectedNetworkSource.next(data);
}
在组件OnInit 中
this.dataSubscription = this.ApiProvider.dataSourceChanges$.subscribe(
(apiData) => {
if (apiData) {
assign to your component local variable
this.componenetLocalvar = apiData;
}
});
当数据发生变化时,您可以在多个组件中订阅此可观察数据。数据将在所有订阅组件中共享
注:
不要忘记取消订阅组件OnDestroy