angular - 使用 LocalStorage 中的 AuthToken 为 NgRx Store 补水的正确方法和位置

标签 angular rxjs ngrx ngrx-store ngrx-effects

从 LocalStorage 补水状态的正确 RxJS/NgRx 方式是什么?

假设应用程序需要通过从 LocalStorage 读取 AuthToken 来了解用户是否已登录。这应该是 NgRx Store 初始化后的第一件事。

对于这种情况,AuthStore 有一个操作 initAuth其关联的 Effect 在服务的帮助下填充状态,同时从 LocalStorage 读取 token 。

目前我正在调度initAuth里面 ngOnInit应用组件:

@Component({
    selector: 'app-root',
    ...
})
export class AppComponent implements OnInit {
    constructor(protected readonly store$: Store<State>) {
    }

    ngOnInit(): void {
        this.store$.dispatch(authActions.initAuth());          
    }
}

但感觉应该有更好的办法。

我正在考虑将效果与以下 @ngrx/effects/init 相关联 dispatch 行动initAuth (如果可能,如何实现?):

enter image description here

备注 : 我没有使用 ngrx-store-localstorage .

最佳答案

您可以使用 ROOT_EFFECTS_INIT Action 并在效果中做任何你想做的事情。

import { ofType, Actions, Effect, ROOT_EFFECTS_INIT } from '@ngrx/effects';

class InitEffects {
  @Effect()
  init$ = this.actions$
    .ofType(ROOT_EFFECTS_INIT)
    .pipe(tap(() => window.alert('I should be shown')));

  constructor(private actions$: Actions) {}
}

还要确保在 forRoot 中注册此效果。方法,功能模块将不起作用。

关于angular - 使用 LocalStorage 中的 AuthToken 为 NgRx Store 补水的正确方法和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55164955/

相关文章:

javascript - 通过每个索引上的特定属性是否为真来正确过滤对象数组的可观察对象?

javascript - 即使在其他链接路由上,Angular Routing routerLinkActive 类也不会从基页中删除

angular - 从 ngOnInit 调度操作时出现 ExpressionChangedAfterItHasBeenCheckedError

reactjs - observable.takeUntil... 和 observable.pipe(takeUntil) 之间的区别

angular - 进行深度复制还是不进行深度复制-无论如何,为什么ngrx的状态应该是不可变的?

Angular NGRX : Use withLatestFrom to call api only once. 但是, 'loader' 仍然设置为 true

angular - 结合多个最新版本的 observable、ngrx

angular - 将分页添加到表格 Angular 2

Angular 2 - 订阅 FormControl 的 valueChanges 是否需要取消订阅?

node.js - JHipster 应用程序在开发模式下生成消息 "this.driver.matchesElement"