Для цикла для VueJS?

#javascript #vue.js

#javascript #vue.js

Вопрос:

Я пробовал это:

 get_choices: function (item, index){
    console.log(item)
},

this.questions.forEach(this.get_choices())
  

Но он говорит

 Error in mounted hook: "TypeError: this.questions.forEach is not a function"
  

Я тоже пробовал:

 for(question in this.questions){
    console.log(question)
}
  

Но он ничего не выводил, он также не отображал никаких ошибок.
Любая помощь? Большое спасибо!

Обновить:

Вот this.questions . Это массив объектов:

 data: {
    questions: [
        {'name': 'etc', 'content': 'etc'},
        {'name': 'etc2', 'content': 'etc2'},
    ],
},
  

Комментарии:

1. Что такое this.questions ? Похоже, что это не массив или что-то, что можно использовать.

2. Вы должны передать функцию вместо ее вызова: this.questions.forEach(this.get_choices)

3. @HaoWu forEach не распознается как метод, который существует на this.questions . Передача ссылки на функцию не помогла бы решить эту проблему.

4. @HaoWu Да, я пробовал, но та же ошибка.

5. @VLAZ Ты прав, вдобавок ко всему… Убедитесь this.questions , что это массив, а затем передайте функцию, как я уже упоминал

Ответ №1:

Вам нужно удалить paranthesis из вызова вашей функции, вам просто нужна ссылка

 this.questions.forEach(this.get_choices)
  

Комментарии:

1. Это правильная причина проблемы с вопросом. Кроме того, я бы также отметил, что ваши данные должны быть возвращены как функция, возвращающая объект. Причина в системе реактивности vue. data() { return { questions: [ /* ... */ ]}}

2. @ChopTRAN ну, это не обязательно, если вы используете CDN и не имеете компонентов, но да, всегда лучше использовать его как функцию vuejs.org/v2/guide/components.html#data-Must-Be-a-Function

Ответ №2:

вам нужно передать объект, чтобы он функционировал как

 this.questions.forEach((item , index) =>{
      this.get_choices(item , index)
 })
  

или вы также можете сделать следующее

 this.questions.forEach(this.get_choices)