角ngRx效果,如何传递参数?

时间:2019-01-21 20:25:35

标签: angular ngrx ngrx-effects

我正在尝试将ID参数从调度发送到效果,我在Google中找不到这种情况的任何示例。

这是我已经拥有的代码:

组件:

=IF(A1="",0,MAX(A1:C1)-MAX(MIN(A1:C1),0))

效果(我需要访问值)

 ngOnInit(): void {
   this.packageClass = `type-${this.package.packageType.toLowerCase()}`;
   // I set the payload to the action
   this.store.dispatch(new LoadClusterInfo({id: this.package.id}));
   this.checkStatus();
 }

最后一个动作:

  @Effect()
  getClusterInfo = 
  this.actions.ofType(resultActions.Type.LOAD_CLUSTER_INFO)
  .pipe(switchMap(() => {
    let id = 'HARDCODED_ID';
    return this.service.getPackageCluster(id); // Here is where i need the value
  }),
  map((packageCluster: PackageCluster) => new LoadClusterInfoSuccess(packageCluster)),
  catchError((err: Error) => of(new LoadClusterInfoError(err))),
  );

如何获取效果中组件(this.package.id)发送的ID?

1 个答案:

答案 0 :(得分:4)

您可以在switchMap运算符中访问操作的有效负载属性。 一些额外的事情:

  • 使用可管道的ofType运算符,因为ofType函数是removed in NgRx 7
  • 键入ofType运算符以执行键入操作
  • 在服务流上使用mapcatchError,否则当发生错误时,效果流将被销毁。 See the NgRx docs for more info
@Effect()
  getClusterInfo = this.actions
  .pipe(
    ofType<LoadClusterInfo>(resultActions.Type.LOAD_CLUSTER_INFO),
    switchMap((action) => {
      return this.service.getPackageCluster(action.id).pipe(
        map((packageCluster: PackageCluster) => new LoadClusterInfoSuccess(packageCluster)),
        catchError((err: Error) => of(new LoadClusterInfoError(err))),
     ); 
    }),  
  );