Angular ngrx存储选择器无需操作即可触发效果请求

Angular ngrx存储选择器无需操作即可触发效果请求,angular,ngrx,ngrx-store,ngrx-effects,Angular,Ngrx,Ngrx Store,Ngrx Effects,使用角度6和NGRX 实际上,我使用了一个存储选择器来获取请求的数据。在我第一次调用actionSignalAction.LOAD\u SIGNAL之后,如果在此之后的任何一点上发生了导致选择器getRequestParams更新的存储更改,则加载信号。在不触发操作的情况下触发请求 我有没有其他的处理方法?我只希望可观察到的流在一个动作中完全通过 我尝试在存储选择器之后执行take(1),但是请求只执行一次 @Injectable() export class SignalEffect {

使用角度6和NGRX

实际上,我使用了一个存储选择器来获取请求的数据。在我第一次调用action
SignalAction.LOAD\u SIGNAL
之后,如果在此之后的任何一点上发生了导致选择器
getRequestParams
更新的存储更改,则加载信号。在不触发操作的情况下触发请求

我有没有其他的处理方法?我只希望可观察到的流在一个动作中完全通过

我尝试在存储选择器之后执行
take(1)
,但是请求只执行一次

@Injectable()
export class SignalEffect {

    constructor(
        private _signalService: SignalService,
        private _actions$: Actions,
        private _store$: Store<IStore>,
    ) {}

    @Effect()
    public fetchSignal(): Observable<IAction<SignalModel[] | HttpErrorResponse>> {
        return this._actions$
            .ofType(SignalAction.LOAD_SIGNAL)
            .pipe(
                switchMap((action: IAction<void>) => this._store$.select(getRequestParams)),
                switchMap((requestParams: RequestParamsModel) => {
                    return this._signalService.getSignal(requestParams)
                        .pipe(
                            map((responseModel: SignalResponseModel | HttpErrorResponse) => {
                                if (responseModel instanceof HttpErrorResponse) {
                                    return ErrorsAction.requestFailure(responseModel);
                                }

                                return SignalAction.loadSignalSuccess(responseModel.results);
                            }),
                        );
                }),
            );
    }

}
@Injectable()
出口类信号效应{
建造师(
专用信号服务:信号服务,
私有_actions$:操作,
private _store$:商店,
) {}
@效果()
public fetchSignal():可观察{
返回此操作。\u$
.类型(信号动作.负载信号)
.烟斗(
switchMap((action:IAction)=>this.\u store$.select(getRequestParams)),
switchMap((requestParams:RequestParamsModel)=>{
返回此。_signalService.getSignal(requestParams)
.烟斗(
map((responseModel:SignalResponseModel | HttpErrorResponse)=>{
if(HttpErrorResponse的响应模型实例){
返回ErrorsAction.requestFailure(responseModel);
}
返回SignalAction.loadSignalSuccess(responseModel.results);
}),
);
}),
);
}
}

尝试将您的第一个
.pipe
移动到类型的
之前

@Effect()
public fetchSignal(): Observable<IAction<SignalModel[] | HttpErrorResponse>> {
  return this._actions$
    .pipe(
      ofType(SignalAction.LOAD_SIGNAL),
      withLatestFrom(this._store$.select(getRequestParams)),
      switchMap(([action, requestParams: RequestParamsModel]) => {
        return this._signalService.getSignal(requestParams)
          .pipe(
            map((responseModel: SignalResponseModel | HttpErrorResponse) => {
              if (responseModel instanceof HttpErrorResponse) {
                return ErrorsAction.requestFailure(responseModel);
              }

              return SignalAction.loadSignalSuccess(responseModel.results);
            }),
        );
      }),
  );
@Effect()
public fetchSignal():可观察{
返回此操作。\u$
.烟斗(
OF类型(信号动作、负载信号),
withLatestFrom(this.\u store$.select(getRequestParams)),
switchMap(([action,requestParams:RequestParamsModel])=>{
返回此。_signalService.getSignal(requestParams)
.烟斗(
map((responseModel:SignalResponseModel | HttpErrorResponse)=>{
if(HttpErrorResponse的响应模型实例){
返回ErrorsAction.requestFailure(responseModel);
}
返回SignalAction.loadSignalSuccess(responseModel.results);
}),
);
}),
);

不,这不起作用,但你让我意识到我的
类型在错误的位置。我意识到我刚才在第二个开关映射中有一些语法错误。无论如何,你可以尝试使用LatestFrom而不是开关映射。我已更新了代码段。WistLatestFrom修复了我的问题。谢谢!