Я хочу, чтобы мой массив, содержащий записи между двумя заданными датами, всегда отражал выбранные даты от-до, но простой возврат response.data из Axios в методе вычислен, похоже, не помогает. Как я могу заставить метод вычислен передавать результаты в приложение?
<template>
<div>
<p v-for = "event in events">{{event.title}}</p>
</div>
</template>
<script>
export default {
name: "App",
data () {
return {}
},
computed: {
fromDate: function() { ..code.. },
toDate: function() { ..code.. },
events: function() {
axios.get('json/' + this.fromDate + '/' + this.toDate).then(response => {
return response.data;
});
}
}
}
</script>
events: function() {
axios.get('json/' + this.fromDate + '/' + this.toDate)
.then(response => {
return response.data;
});
}
Во-первых, вы на самом деле ничего не возвращали внутри этой функции. И для этого вы можете использовать плагин vue-async-computed вместо
// ...
import AsyncComputed from 'vue-async-computed'
// ...
Vue.use(AsyncComputed)
// ...
asyncComputed: {
events: function() {
return axios.get('json/' + this.fromDate + '/' + this.toDate)
.then(response => {
return response.data;
});
}
}
Использование vue-async-computed
вместе с ES7 также работает:
asyncComputed: {
async events() {
const response = await axios.get('json/' + this.fromDate + '/' + this.toDate)
return response.data
}
}
Спасибо! Теперь он отлично работает. Хотя я до сих пор не уверен, почему исходная функция ничего не возвращает. Данные есть, я могу записать их в консоль, если использую функцию JSON.stringify, так почему же их нельзя вернуть в переменную событий? Просто любопытно..
"ES7" по-прежнему возвращает обещание, а не фактическое значение, и для работы ему потребуется плагин asyncComputed.