我使用路由保护从NgRX商店获取数据,并在路由解析之前触发(如果需要)API请求以从商店加载它。基本上我们等待实体在商店中定义,并且对于布尔标志将其标记为已完成加载,然后observable发出true
并且路由应该解析。
然而,尽管在canActivate()
成功发射的情况下可观察到,但该路线并没有加载,我认为没有理由这样做。在此之前,流的行为与预期一致:第一个loaded
为false,实体为undefined
。然后,一旦API调用完成,实体就会被定义,最后loaded
布尔值变为true
。过滤器然后允许我们通过和负载pls' console.log显示一次。此时,路线现在应该加载吗?
canActivate(): Observable<boolean> {
return this.getEntity().pipe(
switchMap(() => {
console.log('load pls');
return of(true);
}),
catchError(() => of(false)),
);
}
getEntity(): Observable<boolean> {
return combineLatest([this._store.select(getActiveEntity), this._store.select(getActiveEntityLoaded)]).pipe(
map(latest => {
const [entity, loaded] = latest;
if (!entity) {
this._store.dispatch(new GetItemRequest());
}
return loaded;
}),
filter(loaded => loaded),
take(1),
);
}
(我意识到布尔loaded
在这里是多余的,但无论如何我都无法做到这一点)