【发布时间】:2021-06-25 12:37:24
【问题描述】:
Angular 路由器在 NgRx 效果中的使用是否有任何限制?
我刚开始学习 NgRx,我有以下代码:
@Effect() public authenticate$ = this.actions$
.ofType(authenticationActions.AUTHENTICATE)
.switchMap((action: AuthenticateAction) => this.authenticationService.authenticate(action.payload)
.map((data: TokenData) => {
const user: User = {
token: data.token,
username: 'dummy',
};
console.log(data);
this.router.navigateByUrl('/');
return new authenticationActions.AuthenticateSuccessAction(user);
})
.catch(error => { console.log(error); return Observable.throw(error); })
);
控制台记录了数据变量,AuthenticateSuccessAction 动作被触发,所以路由器线路正在执行,但导航没有发生。
【问题讨论】:
-
这应该可以正常工作,也许在导航到 root 之前尝试不同的 URL 以确保它不是错误?
this.router.navigateByUrl('/login');确保您没有使用 AuthGuard 之类的东西将您重定向回登录屏幕。 -
我已经尝试了不同的 url,还禁用了所有防护,并在登录页面中创建了一个测试按钮以使用相同的语句并导航。问题是效果里面的那个语句。这很奇怪
-
我的实现与您类似,并且能够毫无问题地路由我的应用程序。这很愚蠢,但请确保您已在构造函数中注入了路由器。
-
在
tap操作符中进行导航(在旧版本的 rxjs 中,它被称为do)。
标签: angular ngrx angular-router ngrx-effects