Vue JS не может отобразить в DOM возвращенные данные метода

Шаблон HTML

<div class="item" v-for="n, index in teamRoster">
   <span> {{ getFantasyScore(n.personId) }} </span>
</div>

метод

getFantasyScore(playerId) {
    if(playerId) {
        axios.get(config.NBLAPI + config.API.PLAYERFANTASYSCORE + playerId)
        .then( (response) => {
            if( response.status == 200 ) {
                console.log(response.data.total)
                return response.data.total;
            }
        });
    }
}

Я пытаюсь отобразить возвращенные данные в DOM, но ничего не отображается. Но когда я пытаюсь утешить журнал, данные отображаются. Как я могу быть в состоянии отобразить это. Что мне не хватает?

2 ответа

Решение

Проблема в том, что ваш getFantasyScore Метод ничего не возвращает, и даже в этом случае данные асинхронны и не реагируют.

Я бы создал компонент, который загружает данные при создании. Что-то вроде

Vue.component('fantasy-score', {
  template: '<span>{{score}}</span>',
  props: ['playerId'],
  data () {
    return { score: null }
  },
  created () {
    axios.get(config.NBLAPI + config.API.PLAYERFANTASYSCORE + this.playerId)
      .then(response => {
        this.score = response.data.total
      })
  }
})

а затем в вашем шаблоне

<div class="item" v-for="n, index in teamRoster">
  <fantasy-score :player-id="n.personId"></fantasy-score>
</div>

Вы не должны использовать методы для результатов AJAX, потому что они асинхронные. Вы можете получить полный teamRoster объект, а затем добавить это к вашему div:

<div class="item" v-for="fantasyScore in teamRoster" v-if="teamRoster">
   <span> {{ fantasyScore }} </span>
</div>
Другие вопросы по тегам