我正在使用服务中的 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();}