NGXS 获取对象的 ID

NGXS get id of object

我正在编写应用程序,我可以通过在我注入 serverService 的地方使用 ngxs 将事件保存在 mongodb 中。当我发送事件时,我在没有 id 的情况下这样做,因为 mongo 自动添加 id,只需等待它然后修补状态。 (插入事件返回 id 然后我寻找整个事件并获取它)

@Action(CreateEvent)
    createEvent({ getState, patchState }: StateContext<EventStateModel>, { event }: CreateEvent) {
        this.eventsService.insertEvent(event)
        .pipe(map(id => id['id']))
        .pipe(switchMap(id => id ? this.eventsService.getEventById(id) : empty() ))
        .subscribe(event => {
            const { events } = getState();

            patchState({
                events: [
                    ...events,
                    event
                ]
            });
        });
    }

但是在添加事件之后我想得到这个 Id,以直接进入事件视图。我不知道如何获取带有 id 的事件。

createRandom(){
    this.store.dispatch(
      new CreateEvent(EventFactory.create())  
    )
  }

当我尝试使用动作处理时,它总是 returns 我用模拟 ID 进行的事件。

this.actions$.pipe(ofActionSuccessful(CreateEvent)).subscribe((ev) => {
   console.log(ev)
})

Console Log return

是的,在这种情况下,动作流将 return 您发送的动作的负载(带有模拟 ID)。

我可以在这里看到两个选项:

  1. 创建不同的操作,例如EventCreated 然后您可以订阅 - 在此操作负载中,包括刚刚创建的内容的详细信息(ID)。在您的 patch 操作后调度它。

  1. 在当前的动作流管道中,使用 withLatestFrom 运算符获取状态的最新视图,并检查 `events 数组中的最后一个 event 以查看生成的 ID。