小编Raz*_*ort的帖子

ngrx 8 影响其他类型的调度动作

我在这里就 ngrx 效果与您联系,我尝试做的是有一个函数登录,它可以分配一个动作类型登录,并且对这个动作的影响将使用我的服务进行 api 调用。在此返回令牌之后,我想调度另外两个操作,一个是 getUserMenu 类型,另一个是 getUserInfo 类型。这两个动作的类型不同,效果也不同。

我最后有 3 个商店:一个用于令牌,一个用于用户信息,一个用于菜单信息

我试过这样的事情:

login = createEffect(
  () =>
  this.actions$
  .pipe(
  ofType(authLogin),
    tap(action => {
    console.log("EFFECT LOGINNNN");
    return this.authService.postLogin(action.username, 
      action.password).pipe(
        map((data: any) => {
          console.log("AUTHTHHTHTH DATATA ", data);
          let props = data.token;
          let payload = {
            token: data.token,
            isAuthenticated: true
          }
      this.store.dispatch(moMenuHttpGetListAction({US_ID: action.username}));  
      this.store.dispatch(userHttpGetInfoAction({US_ID:action.username}));
      this.localStorageService.setItem(AUTH_KEY, payload);
    }))
  })
),
{ dispatch: true }
);
Run Code Online (Sandbox Code Playgroud)

如果我设置 dispatch false 登录工作但没有调用获取用户信息和用户菜单的方法但是当我设置 dispatch true 我有 infinit 循环同样的效果,动作 moMenuHttpGetListAction 看起来像这样:

moMenuHttpGetListEffect = createEffect(
     () => this.actions$.pipe( …
Run Code Online (Sandbox Code Playgroud)

javascript ngrx ngrx-effects angular ngrx-store

7
推荐指数
2
解决办法
9837
查看次数

在 rxjs / ngrx 效果中链接动作的正确方法是什么

我在这里有点挣扎:我在 ngrx 效果中,我想对我的服务进行身份验证,并根据我的服务的回答,分派到操作以检索信息,然后才分派“YEAH LOGIN IS”类型的操作好的”

this is my code so far
    this.actions$.pipe(
      ofType(AuthActions.QuickLogin),
      switchMap((action: any) =>
        this.authService.postQuickLogin$(action.QuickVerifString).pipe(
          switchMap(resultService => {
            const props = {
              username: resultService['username'],
              token: resultService['token'],
              isAuthenticated: true
            }
            this.localStorageService.setItem(AUTH_KEY, props)
            return [
              MoMenuActions.moMenuHttpGetListAction({ US_ID: props.username }),
              UserActions.userHttpGetInfoAction({ US_ID: props.username }),
              AuthActions.LoginSucceed(props)
            ]
          }),
          catchError(error => of(AuthActions.LoginError({ error })))
        )
      )
    )
Run Code Online (Sandbox Code Playgroud)

这运行良好。直到我遇到在 momenuaction 和 useraction 中出现 http 错误的问题,并且我没有输入我的 catch 错误。这是正常的,因为 switchMap 取消了前一个 observable 而只取最后一个。我可以先映射然后映射然后映射 LoginSucceed 但在这种情况下我没有道具来调度我的 LoginSucceed

所以我不仅在寻找一种方法来做到这一点,而且在寻找“好的”/正确的方法来做到这一点。

如果有人有任何解决方案和原因的解释?

rxjs typescript redux ngrx angular

5
推荐指数
1
解决办法
3869
查看次数

动态参数 ngrx 选择器

我在这里有点挣扎我有以下选择器

export const selectMoMenuInfoByIdDynamic = createSelector(
selectMoMenuState,
state => (meId: string) => {
let currentMenu: MoMenu
console.log(state.MoMenuItems)
currentMenu = state.MoMenuItems.find(element => {
return element.ME_ID === meId
})
return currentMenu
}
)
Run Code Online (Sandbox Code Playgroud)

但当我调用它时无法让它工作

const moMenu = this.store.pipe(
select(selectMoMenuInfoByIdDynamic),
map(res => res(meId))
)
console.log(moMenu)
Run Code Online (Sandbox Code Playgroud)

对我有什么想法吗?

会有很大的帮助 提前致谢

javascript rxjs ngrx angular

1
推荐指数
1
解决办法
3468
查看次数

标签 统计

angular ×3

ngrx ×3

javascript ×2

rxjs ×2

ngrx-effects ×1

ngrx-store ×1

redux ×1

typescript ×1