5

我是新手@ngrx/data,我正在浏览文档。

使用该指南,我已经能够复制我以前手动完成的操作 - 例如使用此概述页面上的服务,以下工作调用 REST-API 并将供应商添加到商店。

组件.ts

  onSave(supplier: Supplier) {
    this.supplierService.add(supplier);
  }

我知道我可以做到以下几点:

  hello$ = createEffect(
    () =>
      this.actions$.pipe(
        ofType('[Supplier] @ngrx/data/save/add-one/success'),
        tap(console.log)
      ),
    { dispatch: false }
  );

但是 - 通常是否有一种类型安全的方法可以连接到成功的 API 调用操作/实体操作?

更新 - 澄清

我正在使用@ngrx/data因此我不会直接自己创建操作以及类型的导出。

成功添加供应商后 - 在 http 调用后会产生一个类型为的操作:'[Supplier] @ngrx/data/save/add-one/success'- 我想执行一个效果。除了使用字符串'[Supplier] @ngrx/data/save/add-one/success'(如上所示)之外,还有一个类型安全的钩子吗?

以前(当我自己创建动作时)我会导出一个联合类型并做ofType(supplierActions.addSupplier)

更新 - 更接近答案

找到了ofEntityTypeofEntityOp这让我更接近我的目标,因为这些工作如下ofType

  hello$ = createEffect(
    () =>
      this.actions$.pipe(
        ofEntityType('Supplier'),
        ofEntityOp(EntityOp.SAVE_ADD_ONE_SUCCESS),
        tap(console.log)
      ),
    { dispatch: false }
  );

现在只需找到一种'Supplier'entityMetadata

const entityMetadata: EntityMetadataMap = {
  Supplier: {}
};
4

1 回答 1

1

你可以这样做:

let array = Object.keys(entityConfig.entityMetadata);

它将返回您的实体的名称,在本例中为“供应商”。然后只需将数组用作 ofEntityType 的参数

hello$ = createEffect(
    () =>
      this.actions$.pipe(
        ofEntityType(array),
        ofEntityOp(EntityOp.SAVE_ADD_ONE_SUCCESS),
        tap(console.log)
      ),
    { dispatch: false }
  );
于 2020-05-22T15:59:34.343 回答