【问题标题】:Angular 4- Error - Cannot find a differ supporting object '[object Object]' of type 'object'Angular 4-错误-找不到“对象”类型的不同支持对象“[对象对象]”
【发布时间】:2018-08-23 16:47:12
【问题描述】:

有一个来自 HTTP 的嵌套响应:

 this.dataSet = Observable.of({
     "insideData": [{
         id: "1"
         requiredData:[{
             firstname:"Amy"
             lastname: "Amy"
         }, {
             firstname:"John"
             lastname: "John"
        }]
    }]
 }}).map(mydata => mydata.insideData);

我将其包含在组件中的另一个 Observable 中,并尝试将其减少为 requiredData 数组的嵌套。

getItem(id) {    //id here is needed to get the first loop matching the id
    this.filteredData = this.dataSet.find(data => data.id ===id);
    this.gettingRequiredData = this.filteredData.map(data => data[0].json())
       .map(data => data.requiredData.json() || []);
}

在 HTML 中,我有一个迭代 requiredDataSet 的 ngFor 循环

<div *ngFor="let data of gettingRequiredData; index as i;">......</div>

在运行这段代码时,它会给出

  ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.

我不确定为什么选择对象而不是数组

【问题讨论】:

  • 就目前而言,this.dataSet 是一个 Observable
  • 那么我应该做些什么改变以便它迭代

标签: angular ngfor


【解决方案1】:

绑定到 observable 时忘记使用异步管道。这是订阅 Observable 并发出值所必需的。

<div *ngFor="let data of gettingRequiredData | async; index as i;">......</div>

【讨论】:

  • 当我尝试这样做时,它给出了无法读取 this.gettingRequiredData = this.filteredData.map(data => data[0].json()) 这条线的未定义属性“0”跨度>
  • 是的,因为如果您的样本数据可信,您在 find 中的表达式将永远不会返回任何内容。我的解决方案解决了您询问的问题,但您的代码中还有很多其他问题超出了此问题的范围。
  • 哦,你的意思是说 Rxjs 映射没有以正确的方式完成,我应该以不同的方式迭代它
猜你喜欢
  • 2020-07-07
  • 2017-04-22
  • 1970-01-01
  • 2020-11-22
  • 2018-10-12
  • 2018-02-10
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多