有没有办法使用 ngrx 来观察 Angular 18 应用程序中 rxMethod 调用的结果?

问题描述 投票:0回答:1

在我使用 Angular 18 和 ngrx 的项目中,我尝试使用

@ngrx/signals
和 signalStore 管理实体。

假设我正在 WithMethods 方法中处理新实体的创建,并且我需要知道在父组件中请求何时完成以更改路由、显示 tost 等。

我通过传入

rxMethod
要创建的实体和回调函数来完成此操作,但我认为应该有一种正确的方法来做到这一点:

export const ToolsStore = signalStore(
  { providedIn: 'root' },
  withEntities(entityConfig),
    withMethods((store, entityService = inject(entityService)) => ({
    createEntity: rxMethod<{ entity: EntityDto; callback: (entity: EntityDto) => void }>(
      pipe(
        debounceTime(300),
        filter((model) => !store.entityIds().includes(model.entity.id!)),
        switchMap((model) => {
          return entityService.createEntity(model.entity).pipe(
            tapResponse({
              next: (entity) => {
                patchState(store, addEntity(entity, entityConfig));
                model.callback(entity);
                toast.info('Creating completed!');
              },
              error: console.error,
            }),
          );
        }),
      ),
    ),
  })),
);

在组件中:

this.toolsStore.createEntity({
        entity: entity,
        callback: (a) => {
          this.router.navigate(['tools', 'entitys', a.id]);
          this.createEntity.set(false);
          this.entityId.set(a.id || '');
        },
      });

我看到了 watchStore 方法,但我需要更多信息来了解已创建哪个实体。

angular signals ngrx
1个回答
0
投票

首选方法是在您的状态中有一个状态属性,父组件可以使用该属性来了解创建何时完成。

如果您同时创建多个实体,这可能会变得有点困难。

第二种选择是通过回调来完成,就像你现在拥有的那样。

所以,如果你无法通过状态中的元数据解决它,回调是可以的。

© www.soinside.com 2019 - 2024. All rights reserved.