我在我的应用程序中有一条路由,该路由使用解析器从数据库获取数据(对象数组)。resolve函数检查数据是否以存储状态存在(如果数组具有长度),如果不存在,则分派一个效果以从db中获取数据并等待该效果完成。
fetch效果调度了一个“ set”效果,该效果不能通过错误进行,因为它只是设置了一些值。
我只想获取一次,以防万一用户刷新页面,他仍然会拥有所需的数据,但我的代码只是继续尝试获取,因为起初没有数据。
在我开始玩一些代码之后,我得到了以下内容:
有人可以向我解释这种行为吗?
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
return this.store.select('company').pipe(
take(1),
map(comState => {
return comState.comps;
}),
switchMap(comps => {
if(!comps.length){
this.store.dispatch(new CompActions.FetchAll());
return this.actions$.pipe(
ofType(CompActions.SET_ALL),
take(1), //------------ "line number 1"
// tap(() => {
// this.router.navigate([state.url.split('/')[1]]);
// }),
switchMap(actionData => {
const re = /\d+/;
const compInd = re.exec(state.url);
if(compInd && +compInd < actionData['payload']['length']){
return of(actionData['payload']);
}
this.router.navigate([state.url.split('/')[1]]);
})//------------ "line number 2"
);
} else {
return of(comp);
}
})
)
}
您不应该从resolve
块内部导航。如果这样做,将再次检查防护罩。 Angular将决定您是否可以导航。您要导航到的路线在其他地方声明。