#angular #ngrx #ngrx-store-4.0
#angular #ngrx #ngrx-store-4.0
Вопрос:
ПРОБЛЕМА:
После входа в приложение, когда я нажимаю на signOut
кнопку, оно успешно signOut
и перенаправляется на страницу входа. Но когда я обновляю страницу, попробуйте выйти из системы, тогда это ничего не даст. Кто-нибудь знает, в чем может быть проблема?
код:
// action
export class Logout implements Action {
readonly type = LOGOUT;
}
// effect
@Effect()
logout$ = this.actions$
.ofType(authAction.LOGOUT)
.pipe(
map( () => {
debugger;
this.authService.logoutUser();
return new fromRoot.Go({
path: ['/account/login'],
});
})
);
// calling action on signout
public signOut() {
this.store.dispatch(new fromStore.Logout());
}
СКРИНШОТ Chrome Redux DevTools
Перед обновлением страницы: http://prntscr.com/ne3pc0
После обновления страницы: http://prntscr.com/ne3qpr (После действия выхода из системы ничего не происходит)
Ответ №1:
Попробуйте это
import { throwError } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
// effect
@Effect()
logout$ = this.actions$.pipe(
.ofType(authAction.LOGOUT),
switchMap(() => {
return this.authService.logoutUser()
.pipe(map(() => {
return new fromRoot.Go({path: ['/account/login']})
}),
catchError((error: any) =>{
return of(error)
}),
finalize(() => {
//do something like hide loader
}))
})
);
дайте мне знать в случае возникновения каких-либо проблем
Комментарии:
1. Стоило бы добавить некоторое объяснение того, почему вы считаете, что это сработает. Также я думаю, вы хотели сказать
.pipe(map(() => ...))
, что предполагается, что используется rxjs62. Я протестировал его и его работу. Также это можно сделать и с помощью .pipe
3. @PawanJangid это не работает. Я попытался добавить отладчик в эффект, но после обновления страницы элемент управления не попадает внутрь эффекта после действия.
4. @Johar Zaman: Можете ли вы попробовать один сценарий Login-> Logout-> Login-> Logout без обновления страницы… И после этого обновите страницу и проверьте консоль на наличие ошибок
5. @PawanJangid хорошо, я могу попробовать