【问题标题】:Angular 2 subscribe to an attribute of an observable arrayAngular 2订阅可观察数组的属性
【发布时间】:2017-04-19 11:32:38
【问题描述】:

我试图从可观察对象数组中的一个对象中获取一个属性。除了隔离一个对象并获取各个属性之外,我可以获得所有内容。

这是成功获取数组的服务方法:

getItems(): Observable<IItem[]> {
    return this.get(this.baseUrl + '/items')
      .map((res: Response) => <IItem[]>res.json())
      .do(data => console.log("Items: " + JSON.stringify(data)))
      .catch(this.handleError);
  }

试图只获取一个对象是行不通的:

 getItem(name: String): Observable<IItem> {
    return this.getItems()
      .map((items: IItem[]) => items.find(item => item.name === name))
      .do(item => console.log("Item: " + item)) 
      .catch(this.handleError);
  }

组件

this._itemsApi.getItem("test")
      .subscribe(
        item => this.testItem = item,
        error => this.errorMessage = <any>error);

模板

 <widget icon="file" [count]="testItem?.value">

JSON

["name: test, value: 1","name: test2, value: 0"]

【问题讨论】:

  • 你在控制台有什么吗?有什么错误吗?
  • 控制台输出中未定义
  • 你的意思是Item: undefined
  • 这不是包含两个字符串的对象数组 bur 数组 ["name: test, value: 1","name: test2, value: 0"].array of objects 将是 [{"name ": "test", "value": 1"},{"name": "test2", "value": 0"}]
  • 天哪,谢谢朱莉娅。我知道这有些不对劲。

标签: angular typescript rxjs


【解决方案1】:

试试这个。用于 TypeScript 的 LinQ。这将帮助您从对象数组中找到一个。 https://github.com/kutyel/linq.ts

按照它的文档,它有你需要做的一切。

【讨论】:

    【解决方案2】:

    你有一个字符串数组,而不是对象数组。 重新格式化 API 以返回对象数组 -> [{"key": "value1"},{"key": "value2"}]。然后您可以遍历这些对象并使用 item.value 来获取给定项目的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-19
      • 2016-06-10
      • 2018-01-19
      • 2018-11-26
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 2017-07-23
      相关资源
      最近更新 更多