在防护中使用NGRX Router Store时,为什么导致浏览器挂起?

时间:2018-12-05 09:09:07

标签: angular angular7 ngrx-store angular-router-guards ngrx-router-store

我正在使用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']
}));

为什么会这样,我该如何解决?

0 个答案:

没有答案