Angular 当有效负载数据与当前状态值相同时,如何在ngxs状态选择上触发订阅

Angular 当有效负载数据与当前状态值相同时,如何在ngxs状态选择上触发订阅,angular,ngxs,Angular,Ngxs,我想知道如何解决这个问题 我有一个状态模型,它的属性“triedSubmitting”默认设置为false。 现在,当一个人单击submit按钮时,我会发送一个操作来设置状态,如下所示 //The action dispatched from my component this.store.dispatch(new SetTriedSubmittingOnConfirmationState(true)); //The action in the state itself @Action(Set

我想知道如何解决这个问题

我有一个状态模型,它的属性“triedSubmitting”默认设置为false。 现在,当一个人单击submit按钮时,我会发送一个操作来设置状态,如下所示

//The action dispatched from my component
this.store.dispatch(new SetTriedSubmittingOnConfirmationState(true));

//The action in the state itself
@Action(SetTriedSubmittingOnConfirmationState) SetTriedSubmittingOnConfirmationState(state: StateContext<ConfirmationStateModel>, payload: SetTriedSubmittingOnConfirmationState){
    state.setState(patch({triedSubmitting: payload.data}));
}
//从我的组件发送的操作
this.store.dispatch(新的SetTriedSubmittingOnConfirmationState(true));
//国家本身的行动
@操作(SetTriedSubmittingOnConfirmationState)SetTriedSubmittingOnConfirmationState(状态:StateContext,负载:SetTriedSubmittingOnConfirmationState){
state.setState(补丁({triedSubmitting:payload.data}));
}
现在,一旦此操作发生,它将触发对我的状态选择的订阅

@Select(ConfirmationState.triedSubmitting) triedSubmitting$: Observable<boolean>;

this.addSubscription(this.triedSubmitting$
      .pipe(
        map(triedSubmitting => {
          return triedSubmitting;
        })
      ).subscribe(triedSubmitting => {
          if(!!triedSubmitting && !!this.forms){
            this.formControls = new Array<FormControlExtension>();
            this.iterateForms(this.forms);
          }
        }
      ))
@Select(ConfirmationState.triedSubmitting)triedSubmitting$:可观察;
this.addSubscription(this.triedSubmitting$
.烟斗(
映射(triedSubmitting=>{
返回检索提交;
})
).订阅(triedSubmitting=>{
如果(!!triedSubmitting&&!!this.forms){
this.formControls=新数组();
this.iterateForms(this.forms);
}
}
))
这是意料之中的事

但是,当用户第二次按下按钮时,动作被调度,动作发生,但订阅不会再次触发


为什么会这样?我可能在这里使用了错误的补丁操作符吗?

订阅不会再次被触发,因为NGXS状态没有改变-即
triedSubmitting
的值是
true
并且仍然是
true
,因此可观察到的状态不会发出新值

(从内存中)NGXS在内部使用
distinctunitrichanged
,以便最大限度地减少订阅者收到的更改数量


听起来,在你的用例中,你对被派遣的行为更感兴趣,而不是一个状态改变,所以你不必订阅“确认状态”,你可以考虑使用动作流来通知——请参阅NGXS文档,用于

thx,帮助它看起来确实是行动处理器,我在这里寻找的东西!