Я использую Angular 7 вместе с ngrx и его хранилищем маршрутизаторов.Я реализовал 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
и предоставил простую Наблюдаемую, испускающую жестко закодированное значение 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']
}));
Почему это происходит и как это исправить?