ОШИБКА Ошибка: не удается найти другой поддерживающий объект '[object Object]' типа 'object'. NgFor поддерживает только привязку к Iterables - PullRequest
0 голосов
/ 02 мая 2018
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.

ОШИБКА Ошибка: не удается найти другой поддерживающий объект «[объект]] типа« объект ». NgFor поддерживает только привязку к итерациям, таким как массивы.

Я хочу показать это. enter image description here

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Здесь 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>

Для справки: РАБОЧИЙ ДЕМО

0 голосов
/ 02 мая 2018

Это потому, что ваш второй цикл ngFor пытается перебрать объект.

Значением опции является объект с атрибутом 'option1', 'option2' ...;

Так что вы должны изменить это на массив, как вы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...