在 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 的状态不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Angular/RxJS:带有可观察对象的嵌套服务调用

无法在 RxJs 6 和 Angular 6 中使用 Observable.of

如何使用 catchError() 并且仍然返回带有 rxJs 6.0 的类型化 Observable?

在 Angular 6 中使用 rxjs 可观察对象的目的是啥?与 async/await 相比,rxjs 的优势是啥? [复制]

Angular:如何使用 RXJS 6 调用 finally()

在使用带有 Angular 的 FromEvent RxJS 订阅输入标签值更改时如何避免使用“任何”?