在 Angular 6 中选择带有 RxJS 的状态不起作用
Posted
技术标签:
【中文标题】在 Angular 6 中选择带有 RxJS 的状态不起作用【英文标题】:Select a State with RxJS in Angular 6 doesn't work 【发布时间】:2018-12-12 18:00:09 【问题描述】:在我使用 Angular 和 RxJS 6 的网络应用程序中。该应用程序有一个登录名,登录名的响应是一个令牌,因此,登录后,我将令牌保存在 sessionStorage 中,然后我将令牌解码为保存当前登录的用户。这是登录后的状态:
我正在尝试开发这种行为:如果用户转到页面“..login”(所以在 login.components.ts 中)并且如果他已经登录,则应用程序将重定向到主页。 这是我在 login.component.ts 中的 ngOnInit() 中的代码:
ngOnInit()
this.store.select('auth')
.pipe(take(1),
map((authState: fromAuth.State) =>
console.log('test');
if (authState.authenticated)
this.router.navigate(['/home']);
));
这是AppState的接口:
export interface AppState
user: fromProfile.State,
auth: fromAuth.State,
core: fromCore.State
测试它,我登录,我回家,然后我进入登录页面,我在 console.log() 中放置了一个断点,但它没有到达断点,它甚至没有进入它,并且所以它不会重定向到主页。为什么?
* UPDATED *:这是调试屏幕
【问题讨论】:
您的问题仅与您的断点有关吗? 不,问题是即使用户登录它也不会导航到主页 好吧,ngOnInit() .pipe(take(1),
并不是真正正确的代码……它是您的实际代码吗?
是的!我想这不是真正正确的代码.....看到它不起作用:D我该如何解决?
啊,等一下,哈哈,我忘了一行
【参考方案1】:
select()
函数返回一个 Observable
,因此您必须向它提供 .subscribe()
才能调用 pipe
。
【讨论】:
以上是关于在 Angular 6 中选择带有 RxJS 的状态不起作用的主要内容,如果未能解决你的问题,请参考以下文章
无法在 RxJs 6 和 Angular 6 中使用 Observable.of
如何使用 catchError() 并且仍然返回带有 rxJs 6.0 的类型化 Observable?
在 Angular 6 中使用 rxjs 可观察对象的目的是啥?与 async/await 相比,rxjs 的优势是啥? [复制]