错误错误:无法找到不同的支持对象' [object Object]'类型'对象'。 NgFor仅支持绑定到Iterables

时间:2018-05-02 03:55:33

标签: angular typescript firebase firebase-realtime-database

onGetForm() {
  this.serverData.getData('questionnaire/Student Course Review')
    .subscribe(
       (response: Response) => {
          this.questionnaire = response.json();
          let key = Object.keys(this.questionnaire);
          for (let i = 0; i < key.length; i++) {
            this.currentQuestionsValue.push(this.questionnaire[key[i]])
          }
        },
        (error) => console.log('Form Error', error)
      )
  }

我的html循环,注意:我只是想迭代

<form>
  <div *ngFor="let data of currentQuestionsValue">
    <div *ngFor="let d of data.items ">
      <strong> {{ d.sno }}). </strong>
      <span>{{ d.question}}</span>
      <div *ngFor="let op of d.options">
        <label>
          <input type="radio" name="option">
          <span>{{ op }}</span>
        </label>
      </div>
    </div>
  </div>
</form>

在json数据上运行循环时出现以下错误。

  

错误错误:无法找到不同的支持对象&#39; [object Object]&#39;类型&#39;对象&#39;。 NgFor仅支持绑定到Iterables,例如Arrays。

我想要显示这些物品。 enter image description here

2 个答案:

答案 0 :(得分:1)

此处options不是array,只是简单的json object,因为以下行您会收到错误:

<div *ngFor="let op of d.options">

解决方案:

  

组件方:

objectKeys = Object.keys;
  

模板方:

<div *ngFor="let key of objectKeys(d.options)">
    <label>
        <input type="radio" name="option">
        <span>{{ d.options[key] }}</span>
    </label>
</div>

供参考: WORKING DEMO

答案 1 :(得分:0)

这是因为你的第二个ngFor循环试图遍历一个对象。

选项值是一个具有属性&#39; option1&#39;,&#39; option2&#39; ...;

所以你必须像你一样把它改成数组。

this.questionnaire = response.json();
      let key = Object.keys(this.questionnaire);
      for (let i = 0; i < key.length; i++) {
        this.currentQuestionsValue.push(this.questionnaire[key[i]])
      }
for( let j = 0; j < this.currentQuestionsValue.length ; j++) {
      this.currentQuestionsValue[j].options =  Object.keys(this.currentQuestionsValue[j].options).map(i => options[i])
   }

enter image description here