当前位置: 首页 > 知识库问答 >
问题:

Angular 8:过滤RxJS可观察的结果(来自Angular.io教程)

景元徽
2023-03-14

在Angular.io教程(“英雄之旅应用程序”)中,他们使用以下代码从服务返回对象数组:

/** GET heroes from the server */
getHeroes (): Observable<Hero[]> {
  return this.http.get<Hero[]>(this.heroesUrl)
    .pipe(
      tap(_ => this.log('fetched heroes')),
      catchError(this.handleError<Hero[]>('getHeroes', []))
    );
}
getHero(id: number): Observable<Hero> {
  // call getHeroes (as above)
  // filter the results to return only the here who's id property matches the id parameter;
  this.getHeroes().[filter this somehow, and return an observable with just the match]
}

你是如何做到这一点的?

先抱歉--我在这里发现了类似的问题,但要么它们依赖于Angular/rxjs的旧版本,要么它们不完全符合教程(例如,函数返回的是一个数组,而不是一个可观察的...)

共有1个答案

吴品
2023-03-14

这是一个映射函数--你正取一个特定形状的对象(一个由n个结果组成的数组),并想把它映射到另一个形状的对象(一个单个对象)。

为此,可以在管道中使用map运算符

getHero(id: number): Observable<Hero> {
  return this.getHeroes().pipe(
    map(heroes => heroes.find(x => x.id === id))
  );
}
 类似资料:
  • 本文向大家介绍system.reactive 过滤可观察值,包括了system.reactive 过滤可观察值的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 如何搜索/过滤类型字符串数组的可观察性? 例如,我有以下可观察的 现在,我想根据用户在输入文本框中输入的内容来过滤这个可观察的内容。 所以我有以下代码 请注意,我正在寻找客户端解决方案。我已经有了客户端的数据 我还尝试了flatmap操作符来展平数组,但最终还是无法返回字符串数组类型的可观察值。 任何帮助都将不胜感激。提前谢谢。 应用程序。组成部分html 一个pp.component.ts

  • 我对Observables和RxJs是新手,我想对回报进行调整。如果第一个选择器返回某个值,我希望第二个选择器可以观察到。但是如果第一个选择器没有返回那个特定的值,我想返回false,而不是(false)。我已经走了这么远,但这返回了一个可观察的结果

  • 我试图将一个角度函数转换为可观察模式,因为它的当前实现与它有一些异步性。为了讨论这个问题,我们举一个简单的例子。 可以通过以下方式将其转换为使用可观察对象: 我所面临的问题(据我所知)是针对无法访问内部选择语句的情况。 如果使用常规主题,订阅函数肯定不会得到任何值,因为事件的顺序是: 函数被调用 主题已创建 值已设置 调用函数订阅,因此仅在此事件发生后获取值 如果使用了BehaviorSubjec

  • 有人能向我解释一下为什么运算符可以接受返回或的函数吗? 官方文件说: FlatMap运算符通过将您指定的函数应用于源可观察对象发出的每个项目来转换可观察对象,其中该函数返回本身发出项目的可观察对象。 为什么它也可以返回数组? 例如,它们都是有效的: 但这不起作用:

  • 我正在努力理解rxJs观察者/可观察的。 我有一个Angular应用程序,其中一个服务创建一个可观察的: 闲聊服务ts: 当聊天室中收到消息时。服务ts,消息(假定)是多播的: 两个组件以这种方式订阅可观察对象: 问题:只有一个(最后一个订阅的)收到消息。 问:我如何配置可观察到多播到所有订阅者?