Я хочу сделать что-то подобное для своей регистрации.
При нажатии кнопки регистрации это будет выполнено:
this.store.dispatch(new Register(user))
.subscribe(response => {
localStorage.setItem('token', JSON.stringify(response.token));
let redirectUrl = this.store.dispatch(new RegisterSuccess(response));
if (redirectUrl) {
this.router.navigate([redirectUrl]);
} else {
this.router.navigate(['/home']);
}
}, error => {
this.store.dispatch(new RegisterFailed());
});
Состояние:
@Action(Register)
register({ patchState }: StateContext<AuthenticationStateModel>, { payload }: Register) {
patchState({
isLoading: true
});
return this.authenticationService.register(payload);
}
@Action(RegisterFailed)
registerFailed({ patchState }: StateContext<AuthenticationStateModel>) {
patchState({
isLoading: false
});
}
@Action(RegisterSuccess)
registerSuccess(sc: StateContext<AuthenticationStateModel>, { payload }: RegisterSuccess) {
sc.patchState({
user: payload.user,
token: payload.token,
isAuthenticated: true,
isLoading: false,
});
return sc.getState().redirectUrl;
}
1) Я хочу, чтобы действие Register возвратило Observable из http-запроса.
2) Затем подпишитесь на него, если запрос выполнен успешно, запустите RegisterSuccess (который я хочу, чтобы он возвратил элемент из состояния).Если запрос не выполнен, запустите RegisterFailed.
На самом деле я уже сделал это, поместив тот же код в состояние (с небольшими изменениями в c), но я чувствую, что он слишком запутанный и не совсем корректный способ, поэтомувместо этого поместите его в компонент, но я не могу заставить его работать снова.