#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 является функциональным модулем. По сути, я хочу, чтобы после входа в систему я хотел отправить определенное действие.