В 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>
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;
});
});
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости