即使在Angular NGXS中有错误,ofAction也会成功返回True

时间:2019-03-07 14:18:53

标签: angular angular6 state-management ngxs angular-state-managmement

当我尝试编辑用户时遇到问题。成功更新后,我决定再次获取所有用户。但是,如果有错误,我不希望表格重置并且模态消失。我的问题是当我尝试更新用户时,它返回错误。即使出现错误,ofActionSuccessful仍会触发。请在下面查看我的代码。

  

Component.ts

    onEditUser(form: FormGroup) {
        const formData = {
          id: form.value.id,
          name: form.value.name,
          email: form.value.email
        };
        console.log(formData);
        if (form.valid) {
          swal({
            title: 'Update',
            text: 'Are you sure you want to update changes?',
            type: 'warning',
            showCancelButton: true,
            confirmButtonColor: '#0CC27E',
            cancelButtonColor: '#FF586B',
            confirmButtonText: 'Confirm',
            cancelButtonText: 'Cancel',
            confirmButtonClass: 'btn btn-success btn-raised mr-5',
            cancelButtonClass: 'btn btn-danger btn-raised',
            buttonsStyling: false
          }).then(result => {
            console.log(result);
            if (result.value) {
              this.store.dispatch(new UpdateUser(formData));
              this.actions$.pipe(ofActionSuccessful(UpdateUser)).subscribe(() =>
                form.reset(),
                this.modalReference.close()
              );
            }
          });
        }
      }
  

State.ts

@Action(UpdateUser)
      updateTodo({ getState }: StateContext<UserStateModel>, { payload }: UpdateUser) {
        return this.usersService.updateUser(payload).pipe(
          tap((result) => {
            console.log(result);
            const state = getState();
            this.store.dispatch(new GetUsers);
          }),
          catchError(err => {
            console.log(err);
            return throwError(err);
          })
        );
      }

2 个答案:

答案 0 :(得分:0)

我们的更新用户调用与ofActionSuccessful之间没有任何联系。每当swal promise解决时,您总是在调度ActionSuccessful动作。您可能一直在尝试执行以下操作。

df %>%
  mutate(
    group = ifelse(as.numeric(random_numbers) < 600, "000-599", "600-999"),
    desired_result = paste0(first_char, group)
  )

答案 1 :(得分:0)

这已经很晚了,但是我想提出一个建议。

this.store.dispatch(new UpdateUser(formData));
this.actions$.pipe(ofActionSuccessful(UpdateUser)).subcribe((res)=> {
// any thing you want to do
});