#angular #rxjs #ngrx #ngrx-effects
#угловатый #rxjs #ngrx #ngrx-эффекты
Вопрос:
Я изучаю angular и использую Effects
его. У меня есть код выхода из системы, и он работает нормально. Но моя проблема в том, что при использовании кода ниже он не перемещается.
@Effect({ dispatch: false })
authLogOut = this.actions$
.pipe(ofType(AuthActions.LOGOUT))
.pipe(tap(() => {
this.router.navigate(['']);
}))
AuthActions.ts
export const TRY_SIGNIN = 'TRY_SIGNIN';
export const LOGOUT = 'LOGOUT';
export class Logout implements Action {
readonly type = LOGOUT;
}
export class TrySignin implements Action {
readonly type = TRY_SIGNIN;
constructor(public payload: { username: string, password: string }) {
}
}
export type AuthActions = Logout | Signin
Но когда я подписываюсь, навигация работает нормально.
@Effect()
authSignin = this.actions$
.pipe(ofType(AuthActions.TRY_SIGNIN))
.pipe(map((action: AuthActions.TrySignin) => {
return action.payload;
}))
.pipe(switchMap((authData: { username: string, password: string }) => {
return from(firebase.auth().signInWithEmailAndPassword(
authData.username, authData.password));
}))
.pipe(switchMap(() => {
return from(firebase.auth().currentUser.getIdToken())
}))
.pipe(mergeMap((token: string) => {
this.router.navigate(['']);
return [
{
type: AuthActions.SIGNIN
},
{
type: AuthActions.SET_TOKEN,
payload: token
}
]
}))
;
Ответ №1:
Вам не нужен второй канал.
.pipe(
ofType(AuthActions.LOGOUT),
tap(() => {
this.router.navigate(['']);
})
)
Ответ №2:
После стольких часов поисков моей проблемы. Я решаю это, проверяя свою маршрутизацию. Я случайно поставил защиту в свой маршрутизатор, который указывает на этот URL.