通过具有多个 id 的帖子进行 Angular 循环

标签 angular rest http

我想遍历帖子的 GET 请求并从最喜欢的 id 数组中获取最喜欢的帖子

我试过下面的代码,但我不知道这是不是最好的方法

数据.服务.ts

getPosts(): Observable<Post[]> {
    return this.http.get<Post[]>(this.postsUrl);
  }

我想通过他们的 ID 从最喜欢的帖子数组中获取所有帖子 组件

 getFavorites(): void {
    this.serverService.getPosts().subscribe(posts => {
      this.favoriteIds.forEach(element => {
        let data = posts.filter(post => post.id === element);
        this.posts = data;
        console.log(this.posts);
      });
    });
  }

最佳答案

您需要在此处使用 map 运算符在订阅之前映射您的帖子:

this.serverService.getPosts().pipe(
      map(posts => posts.filter(post => this.favoriteIds.includes(post.id)))
).subscribe(data => this.posts = data)

您需要做的另一件事是摆脱您的 getPosts() 方法,只使用带有 shareReplay(1) 运算符的本地 Observable 赋值:

getPosts$ = this.http.get<Post[]>(this.postsUrl).pipe(
      shareReplay(1)
)

这将防止您每次尝试获取收藏夹时都对服务器进行新调用。

关于通过具有多个 id 的帖子进行 Angular 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56309433/

相关文章:

node.js - Angular 2 'app-root' 未在 ExpressJS 路线上加载

javascript - 为什么 [(ngModel)] 破坏了 Angular 4 中的所有模板?

javascript - 在 Angular 中将 Http 调用作为服务

http - 使用散列作为 id 的一部分

http - 如何在 golang 中使用 "422 Unprocessable Entity (WebDAV)"或任何其他自定义 http 状态代码

javascript - 将 observable<object> 转换为 observable<task[]>

angular - 如何在 Angular CLI 应用程序中提供 pdf.js worker

database - 访问/更新数据库是否需要安静的服务?

rest - Neo4J Rest API理解

python - 使用 Flask-Security 对 REST API 进行身份验证