Не работает система реактивности Vue.js

120
22 июня 2021, 14:20

В mounted устанавливаю значение abilities. На странице должны выводится данные из этого свойства, но ничего не выводится. Попробовала вывести это свойство целиком на странице - вывелись пустые фигурные скобки. Хотя если посмотреть во Vue Developer, это свойство правильно изменилось.

data() {
    return {
        pokemonInfo: null,
        abilities: null,
        ready: false
    }
},
mounted: function () {
    var id = this.$router.currentRoute.path.slice(1);
    var abili = {};
    this.$axios.get(`https://pokeapi.co/api/v2/pokemon/${id}`)
        .then((response) => {
            this.pokemonInfo = response.data
            for (let i = 0; i < this.pokemonInfo.abilities.length; i++) {
                this.$axios.get(this.pokemonInfo.abilities[i].ability.url)
                    .then((response) => {
                        abili[i] = response.data;
                    })
            }
            this.abilities = abili;
            this.ready = true;
        })
},

Вот тут вот данные должны выводится, выше это завернуто в блок с v-if="ready"

<h2>Abilities:</h2>
<p v-for="(item, index) in abilities">{{abilities[index].ability.name}}</p>
<p>{{abilities}}</p>

Answer 1

1) abilities у вас объект, а по факту это массив. Так пусть массивом и будет.

2) У вас есть вложенный запрос, которые вызываются параллельно и по результату выполнения записываются в некий abili, но основной контекст выполнения результат не ждет и сразу ассайнит пустой объект в abilities.

В результате должно получиться так (пример здесь):

  mounted: function() {
    this.$axios
      .get(`https://pokeapi.co/api/v2/pokemon/2`)
      .then(response => {
        this.pokemonInfo = response.data;
        const abilityRequests = this.pokemonInfo.abilities.map((el, index) => {
          return this.$axios.get(this.pokemonInfo.abilities[index].ability.url);
        });
        Promise.all(abilityRequests).then((abilities) => {
          this.abilities = abilities.map(response => response.data);;
          this.ready = true;
        });
      });
  }
READ ALSO
Как сделать подсказку для поля setCustomValidity?

Как сделать подсказку для поля setCustomValidity?

У меня есть форма регистрации, она не использует html тэг form, а работает исключительно на ajax запросахМне нужно сделать подсказки с выводом ошибок...

127
JS Скачать файл в ANSI-кодировке (Windows-1251)

JS Скачать файл в ANSI-кодировке (Windows-1251)

Много вопросов было уже типа: "открываю файл с помощью <input type="file"/> и FileReader, а там значки ����� вместо русских букв"

90
Не работает якорное меню

Не работает якорное меню

использую якорное меню на сайтеИспользую такой вот код

93
.on(&#39;click&#39; в .on(&#39;click&#39; как реализовать или чем заменить

.on('click' в .on('click' как реализовать или чем заменить

При нажатии на <div name="show_details_by_order" открывается <div id="order_body_ и стает доступно нажать на <a name="show_extended_details", но при нажатии на нее срабатывает...

93