NGRX操作/效果的多个有效负载

时间:2018-02-05 08:44:21

标签: javascript angular mongodb ngrx ngrx-effects

我需要使用ngrx/effect向API发送一个put请求,但该请求需要id和内容,因此MongoDB可以找到帖子。

这是代码,我试图设置两个动作有效负载:



export class UpdatePost implements Action {
    readonly type = UPDATE_POST

    constructor(public payload: string & Post ) { }
}




效果如下:



@Effect() 
    editPost$: Observable<Action> = this.actions$
    .ofType(PostActions.UPDATE_POST)
    .map((action: PostActions.UpdatePost) => action.payload)
    .switchMap((?) => {
        return this.postService.editPost(id, post);
    })
    .map(editedpost => ({type: PostActions.UPDATE_POST_SUCCESS, payload: editedpost}))
}
&#13;
&#13;
&#13;

editPost()需要两个参数:id和content。

我想我的动作有效负载应该设置为另一种方式,我是ngrx的新手,所以欢迎提出建议。

1 个答案:

答案 0 :(得分:3)

当您声明一个类型为string&amp;的变量时发布,这意味着这个变量拥有Post的所有方法和字符串的所有方法。这可能不是你想要的。 您希望您的操作具有标识符(类型为字符串)和帖子。您可以为此声明一个接口,或者您的操作可以具有多个属性,如:

export class UpdatePost implements Action {
  readonly type = UPDATE_POST

  constructor(public id: string, public payload: Post ) { }
}

那么在你的效果中你可以写:

@Effect() 
    editPost$: Observable<Action> = this.actions$
    .ofType(PostActions.UPDATE_POST)
    .switchMap(action => {
        return this.postService.editPost(action.id, action.post);
    })
    .map(editedpost => ({type: PostActions.UPDATE_POST_SUCCESS, payload: editedpost}))
}