Я пытаюсь показать данные, полученные из запроса топора ios. Я понял, что Ax ios возвращает Обещание, и мне нужно ждать, поэтому он здесь не работает:
get categories(): Array<string> {
let categories: Array<string> = []
api.getORMJson().then((response) => {
categories = response.data.nodes[0].nodes
// Correct output
console.log(response.data.nodes[0].nodes)
})
return categories
}
Я уже пробовал подход с Promise, но это тоже не сработало:
get categories(): Promise<Array<string>> {
return new Promise<Array<string>>((resolve) => {
api.getORMJson().then((response) => {
resolve(response.data.nodes[0].nodes)
})
})
}
В конечном итоге я хочу, чтобы мои данные отображались в виде выбора, например, здесь:
<select>
<option v-for="category in categories" :key="category" :value="category">
{{ category }}
</option>
</select>
РЕДАКТИРОВАТЬ: я уже приводил его в действие один раз, но очень грязно:
@Prop({ default: [], required: true })
public categories!: Array<string>
И получатель выглядит так:
get allCategories(): Array<string> {
return this.categories
}
Проблема здесь в том, что я мутировал свойство непосредственно в mount-Function, которая выглядела так:
mounted() {
api.getORMJson().then((response) => {
this.categories = response.data.nodes[0].nodes
})
}
Тогда я мог бы легко перебрать все категории, и все заработало, но Vue дал мне заслуженную ошибку: "[Vue warn]: избегайте прямого изменения свойства, поскольку значение будет перезаписываться всякий раз, когда родительский компонент перерисовывает. Вместо этого используйте данные или вычисляемое свойство, основанное на значении реквизита. Мутирует реквизит: "category" "