我想为我的注册做一些类似的事情。
单击register按钮时,将执行以下操作:
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操作从http请求中返回Observable。
2)然后订阅它,如果请求成功,则触发RegisterSuccess(我希望它从状态返回一个项)。如果请求失败,则触发RegisterFailed。
我实际上已经通过将相同的代码放入状态(只做了很少的修改),但是我觉得它太乱了,而且不是正确的方式,所以把它放在组件中,但是我不能让它再次工作。
发布于 2018-11-15 11:27:50
docs建议您执行以下操作:
对于同步操作:
return ctx.dispatch(new TakeAnimalsOutside());
对于异步操作:
return this.animalService.feed(action.animalsToFeed).pipe( ... mergeMap(() => ctx.dispatch(new TakeAnimalsOutside()))
dispatch的有趣之处在于,您可以使用dispatch([new Action1(), new Action2(), ...etc])
https://stackoverflow.com/questions/50723682
复制相似问题