首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ngxs -如何链接操作?

Ngxs -如何链接操作?
EN

Stack Overflow用户
提问于 2018-06-06 23:04:49
回答 1查看 5.7K关注 0票数 3

我想为我的注册做一些类似的事情。

单击register按钮时,将执行以下操作:

代码语言:javascript
复制
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());
    });

状态:

代码语言:javascript
复制
  @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。

我实际上已经通过将相同的代码放入状态(只做了很少的修改),但是我觉得它太乱了,而且不是正确的方式,所以把它放在组件中,但是我不能让它再次工作。

EN

回答 1

Stack Overflow用户

发布于 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])

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50723682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档