在我使用 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 方法,但我需要更多信息来了解已创建哪个实体。
首选方法是在您的状态中有一个状态属性,父组件可以使用该属性来了解创建何时完成。
如果您同时创建多个实体,这可能会变得有点困难。
第二种选择是通过回调来完成,就像你现在拥有的那样。
所以,如果你无法通过状态中的元数据解决它,回调是可以的。