【发布时间】:2019-04-16 13:26:24
【问题描述】:
我需要从 http 获取 Post[],然后将其显示在 post-list 组件上。我可以删除post-list 模板上的一些项目,并通过导航到我使用post-edit 组件的另一条路线来编辑一些项目。
如何在它们之间共享相同的Post[] 数组,以便更改将立即显示在应用程序中?我假设我需要在服务中存储Post[]?从组件编辑/更新它的正确方法是什么?
在这里,我试图通过服务内的tap() 运算符将Post[] 数组保存在服务内
getAllPosts(): Observable<Post[]> {
return this.http.get<Post[]>("https://jsonplaceholder.typicode.com/posts");
}
getAllUsersPosts(userId: number): Observable<Post[]> {
return this.getAllPosts().pipe(
map((posts: Post[]) => posts.filter((p: Post) => p.userId === userId)),
tap(posts => {
//storing to service
this.userPosts = posts;
})
);
}
在执行删除方法后共享更新的Post[] 我试图将存储的数组发送回订阅者,但它没有帮助
deletePost(id: number): Observable<any> {
return this.http.delete(`https://jsonplaceholder.typicode.com/posts/${id}`).pipe(
mapTo(res => {
const index = this.userPosts.findIndex(p => p.id == id);
// console.log(index);
this.userPosts.splice(index, 1);
return this.userPosts;
})
)
}
实现这一目标的正确方法是什么?
【问题讨论】:
-
如何在组件中使用
getAllUsersPosts、deletePost和userPosts?