эффект ngrx не запускается, если действие отправляется из другого модуля

#angular #ngrx #ngrx-store #ngrx-effects #ngrx-entity

#angular #ngrx #ngrx-store #ngrx-эффекты #ngrx-сущность

Вопрос:

Итак, вот что я пытаюсь сделать.

В BookmarksModule модуле функций с отложенной загрузкой у меня есть эффект, который прослушивает authActions.loginSuccess w / c, зарегистрированный в AuthModule w / c, не загруженный с отложенной загрузкой.

 @Injectable({
  providedIn: 'root',
})
export class FavoriteEffects {
  getFavoriteAfterLogin$ = createEffect(
    () => {
      return this.actions$.pipe(
        ofType(authActions.loginSuccess),
        map(() => favoriteActions.getFavorites())
      );
    }
  );
  

Вот как authActions.loginSuccess оно отправляется.

 loginCallback$ = createEffect(() => {
  return this.actions$.pipe(
    ofType(authActions.loginCallback),
    exhaustMap(() =>
      this.authService.currentUser$.pipe(
        map(currentUser => authActions.loginSuccess({ currentUser })),
        catchError(error =>
          of(authActions.loginFailure({ error: error?.error?.message }))
        )
      )
    )
  );
});

loginSuccessRedirect$ = createEffect(
  () => {
    return this.actions$.pipe(
      ofType(authActions.loginSuccess),
      tap(() => this.router.navigate([this.redirects.login.success]))
    );
  },
  { dispatch: false }
);
  

Как вы можете видеть, при authActions.loginSuccess отправке оно корректно перехватывается loginSuccessRedirect$ внутри того же класса, но это действие не перехватывается в модуле с отложенной загрузкой?

Это скриншот действий в ngrx store devtools введите описание изображения здесь

Похоже update-reducers , что действие для функционального модуля отправляется ПОСЛЕ loginSuccess того, как действие уже было отправлено.

Как мне это исправить?

Комментарии:

1. Поскольку BookmarksModule является модулем с отложенной загрузкой, поэтому его эффект еще не загружен, в результате эффект не был вызван. Эффект будет вызван при загрузке BookmarksМодуля. Вы можете попробовать это.

2. @user2216584, как мне это сделать в этом случае, если нужно прослушать действие из загруженного модуля?

3. Является ли BooknarksModule угловым функциональным модулем или функциональным модулем ngrx? Если это функциональный модуль ngrx, вам нужно его загрузить. Если это модуль функций angular, то вы не сможете сделать то, чего пытаетесь достичь, вам придется немного изменить дизайн.

4. да, модуль BookmarksModule является функциональным модулем. По сути, я хочу, чтобы после входа в систему я хотел отправить определенное действие.