我正在使用Angular 7,以及ngrx及其路由器存储。在this example之后,Todd Motto之后,我实现了Go()
路由器效应:
@Effect({ dispatch: false })
navigate$ = this._actions$
.pipe(
ofType(RouterActionTypes.Go),
map((action: routerAction.Go) => action.payload),
tap(({path, query: queryParams, extras}) => {
this._router.navigate(path, { queryParams, ...extras });
})
);
为简单起见,我删除了AuthGuard
中的所有现有逻辑,并提供了一个简单的Observable,它发出了false
的硬编码值:
canActivate(): Observable<boolean> {
return of(false)
.pipe(
tap(() => {
console.log('navigate')
// This works fine
this._router.navigate(['/login']);
// Uncomment the following and your browser will hang
// this.store.dispatch(new fromActions.Go({
// path: ['/login']
// }));
}),
);
}
如上所述,直接使用Router
时一切正常:
this._router.navigate(['/login']);
但是,在使用路由器存储时,我遇到无限循环,导致浏览器挂起:
this.store.dispatch(new fromActions.Go({
path: ['/login']
}));
为什么会这样,我该如何解决?