And*_*len 5 typescript ngrx angular angular-ngrx-data angular8
我是新手@ngrx/data,正在查看文档。
使用该指南,我已经能够复制以前手动完成的操作 - 例如,使用此概述页面上的服务,以下工作调用 REST-API 并将供应商添加到商店。
组件.ts
onSave(supplier: Supplier) {
this.supplierService.add(supplier);
}
Run Code Online (Sandbox Code Playgroud)
我知道为了达到效果,我可以执行以下操作:
hello$ = createEffect(
() =>
this.actions$.pipe(
ofType('[Supplier] @ngrx/data/save/add-one/success'),
tap(console.log)
),
{ dispatch: false }
);
Run Code Online (Sandbox Code Playgroud)
但是 - 是否有一种类型安全的方法来挂钩成功的 API 调用操作/实体操作?
更新-澄清
我正在使用@ngrx/data,所以我不会直接自己创建操作以及类型的导出。
成功添加供应商后 - 在 http 调用后会产生以下类型的操作:'[Supplier] @ngrx/data/save/add-one/success'- 我想要执行效果。除了使用字符串'[Supplier] @ngrx/data/save/add-one/success'(如上所示)之外,还有类型安全的钩子吗?
以前(当我自己创建操作时)我会导出联合类型并执行ofType(supplierActions.addSupplier)
更新 - 更接近答案
找到了ofEntityType,ofEntityOp这让我更接近我的目标,因为这些工作如下ofType:
hello$ = createEffect(
() =>
this.actions$.pipe(
ofEntityType('Supplier'),
ofEntityOp(EntityOp.SAVE_ADD_ONE_SUCCESS),
tap(console.log)
),
{ dispatch: false }
);
Run Code Online (Sandbox Code Playgroud)
现在只需找到一种'Supplier'从entityMetadata
const entityMetadata: EntityMetadataMap = {
Supplier: {}
};
Run Code Online (Sandbox Code Playgroud)
小智 1
你可以这样做:
\n\nlet array = Object.keys(entityConfig.entityMetadata);\nRun Code Online (Sandbox Code Playgroud)\n\n它将返回您的实体的名称,在本例中为 \xe2\x80\x9cSupplier\xe2\x80\x9d。\n然后只需使用该数组作为 ofEntityType 的参数
\n\nhello$ = createEffect(\n () =>\n this.actions$.pipe(\n ofEntityType(array),\n ofEntityOp(EntityOp.SAVE_ADD_ONE_SUCCESS),\n tap(console.log)\n ),\n { dispatch: false }\n );\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |