在 Angular 6 中使用 location.back() 后不再请求数据 - 重播主题是否必要?



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

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

我想这来自使用异步管道,因为它在离开主组件时取消订阅行为主体。

我是否需要为此实现一些缓存策略,或者是否可以使用具有我从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();
}

主组件.html:

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

子组件:

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

提前非常感谢:)

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

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

最新更新