我正在学习ngrx,并尝试使用元数据作为示例(我正在遵循NgRx文档),我的问题是我的服务正在接收我的操作类型,并且我只需要有效负载。
我尝试过的事情:
在我的组件中,我通过用户对象进行了调度:
public save() {
const user: Usuario = this.formGroup.value;
this.store.dispatch(saveUser(user));
}
这是我的动作
export const saveUser = createAction('[Users API] Save User', props<Usuario>());
这是处理此操作的效果:
public saveUser$ = createEffect(() =>
this.actions$.pipe(
ofType(saveUser),
mergeMap((action) => this.usuarioService.save(action))
)
);
这是我的服务
public save(data: T): Observable<any> {
console.log(data);
return this.http.post<any>(`${this.apiPath}`, data);
}
我的问题是我的服务正在接收我的操作类型,我只需要对象用户:
{
"id": null,
"nome": "naaame",
"cidade": "ciiity",
"type": "[Users API] Save User"
}
我尝试在操作中传递一个对象:
this.store.dispatch(saveUser({ user: user }));
但是我的服务是一个抽象类,我在我的服务中扩展了该类以减少重复的代码,因此,在该类中,我不能使用data.user,因为其他服务也扩展了该类并使用相同的功能{{ 1}}。
我还试图从对象中删除类型,并在不执行此操作的情况下返回服务:
save()
这样,我的服务不会收到type属性,但是我收到了来自ngrx的错误消息:
错误错误:效果“ UsuarioEffects.saveUser $”调度了无效的 动作:{“ id”:5,“ nome”:“ wwww”,“ cidade”:“ wewe”}
ERROR TypeError:操作必须具有type属性
答案 0 :(得分:2)
public saveUser$ = createEffect(() =>
this.actions$.pipe(
ofType(saveUser),
mergeMap((action) => this.usuarioService.save(action.Usuario))
)
);