这是我的解析器
@Injectable()
export class FieldsResolver implements Resolve<string[]> {
private result:Array<string> | null = null;
constructor(private httpClient:HttpClient) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
return this.result || this.httpClient.get<Array<string>>('<api_route>')
.pipe(
tap(fields => {
this.result= fields;
})
);
}
}
如您所见,解析器返回的数据与我的路线无关。因此,每次路由更改时,我都不需要实际向我的API发出请求。
我上面的代码有效:它仅在第一次时执行请求。在接下来的几次中,它将返回缓存的结果。
我只是想知道是否还有更多的rxjx方法可以做到这一点。
答案 0 :(得分:0)
您需要返回(this.result)-您的alwasys函数需要返回一个可观察值。所以
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
if (this.result)
return of(this.result)
return this.httpClient.get<Array<string>>('<api_route>')
.pipe(
tap(fields => {
this.result= fields;
})
}