Почему NGRX Router Store вызывает зависание браузера при использовании его в охране? - PullRequest
0 голосов
/ 05 декабря 2018

Я использую 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']
}));

Почему это происходит и как это исправить?

...