在 Angular 中使用 location.back() 后不要再次请求数据 6 - ReplaySubject 有必要吗?

Don't request data again after using location.back() in Angular 6 - ReplaySubject necessary?

我正在使用我的服务中的 BehaviourSubject 从后端获取所有数据,我使用异步管道在我的 mainComponent 中订阅了这些数据。

如果我现在路由到另一个子组件,然后单击例如后退按钮(使用 Location.back() 函数)返回到我的主组件,它总是使用来自后端的新请求获取所有数据。

我猜这是因为使用了异步管道,因为它在离开 mainComponent 时取消订阅了 BehaviourSubject。

我是否需要为此实施一些缓存策略,或者可以使用具有我从 mainComponent 获取的所有数据大小的 ReplaySubject 来解决这个问题?

在我的代码下方:

服务:

private subject$: BehaviorSubject<Setting[]> = new BehaviorSubject<Setting[]>([]);

fetchData() {
  const fetch$: Observable <Setting[]> = this.getSettings().pipe(share());
  fetch$.pipe(
      map(allSettings => this.subject$.next(allSettings))
    );
  return fetch$;
}

主要组件:

data: Observable<Setting[]>;

// Load Setting while starting
ngOnInit() {
  this.data = this.apiService.fetchData();
}

MainComponent.html:

<tr *ngFor="let s of data | async">
  <!--Do Something...-->
</tr>

子组件:

goBack(): void {
  this.location.back();
}

非常感谢:)

当你 "come back" 到组件时,你在 ngOnInit() 中的所有内容都会被执行。您可以将数据放在服务中的变量中,然后在 ngOnInit() 上检查服务中是否有任何数据,如果有则不要再次从服务器请求它们。

if(myservice.data) {
do nothing}
else {
myservice.data = this.apiService.fetchData();}