Почему функция не определена при eval?
У меня есть следующий файл Pokemon.vue:
<template>
<div class="pokemon">
<h1>Pokemon Overview</h1>
<div class v-for="pokemon in pokemonArray" :key="pokemon.id">
<p>{{ pokemon.name }}</p>
<p>{{ pokemon.number }}</p>
<p>{{ pokemon.height }}</p>
<p>{{ pokemon.weight }}</p>
<p>{{ pokemon.types }}</p>
</div>
<button @click="AddPokemon">AddPokemon</button>
</div>
</template>
<script>
import axios from "axios";
import db from "@/firebase/init";
export default {
name: "Pokemon",
data() {
return {
pokemonArray: [],
};
},
methods: {
CapitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
},
AddPokemon() {
for (var i = 520; i < 524; i++) {
axios.get("https://pokeapi.co/api/v2/pokemon/" + i).then((response) => {
var types = [];
for (var j = 0; j < response.data.types.length; j++) {
types.push(response.data.types[j].type.name);
}
db.collection("pokemon").add({
number: i,
name: CapitalizeFirstLetter(response.data.name),
weight: response.data.weight / 10,
height: response.data.height / 10,
types: types,
image:
response.data.sprites.other["official-artwork"].front_default,
});
});
}
},
},
created() {
//Fetch data from the firestore
db.collection("pokemon")
.get()
.then((snapshot) => {
snapshot.forEach((doc) => {
let pokemon = doc.data();
this.pokemonArray.push(pokemon);
});
});
},
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
Однако, когда я нажимаю кнопку, которая запускает функцию AddPokemon, я получаю удар
CapitalizeFirstLetter не определен при eval
И я не понимаю, почему это происходит. Я явно что-то упускаю, но, насколько я понимаю, было бы неплохо использовать другой метод, отличный от "методов", но это может быть не так? Любая помощь очень ценится.
У вопроса есть решение - Посмотреть?
Ответы - Почему функция не определена при eval? / Why is function is not defined at eval?

Является ответом!

03.12.2020 02:14:57
Это должно быть this.CapitalizeFirstLetter
:
db.collection("pokemon").add({
number: i,
name: this.CapitalizeFirstLetter(response.data.name),
weight: response.data.weight / 10,
height: response.data.height / 10,
types: types,
image:
response.data.sprites.other["official-artwork"].front_default,
});

03.12.2020 02:16:16
Вам нужно использовать this
для доступа к экземпляру vue, например, this.CapitalizeFirstLetter(string)
Помочь в развитии проекта: