Задача
Я пытаюсь загрузить данные из моей базы данных, используя vuejs + axios в проекте Laravel. Локально я могу сделать запрос, используя axios, и он возвращает данные, назначает их переменным и затем выводит данные в DOM.
Когда я запускаю тот же код в производство, запрос axios выполняется немного дольше, но кажется, что он достаточно длинный, чтобы vuejs был готов, прежде чем будут возвращены все данные, что вызывает меня досадную ошибку 'undefined property', когда данные пытаются отображаться. Иногда эта ошибка сохраняется до 20+ обновлений до загрузки данных.
Как мне кажется, проблема
Так что я предполагаю, что при чтении axios не получает данные так быстро, как следовало бы, поэтому vuejs готов начать обслуживать данные, но у axios еще не было возможности их собрать, в результате чего undefined error
Что я прочитал и попробовал
Я читал, что использование операторов v-if
для объектов, которые зависят от данных, должно решить эту проблему. Но это не так, все это делает это скрывает объект от просмотра, если данные отсутствуют. Например ...
HTML
<!-- If user.name exists, display user.name -->
<div v-if="user.name">
@{{ user.name }}
</div>
JAVASCRIPT
<script>
new Vue({
el: '#container',
data: {
user: {}
},
mounted() {
this.getUserData();
},
methods: {
getUserData(){
axios.post('/user/get').then((response) => {
// Check the response was a success
if(response.data.status === 'success')
{
this.user = response.data.user;
}
});
},
}
})
</script>
Это не работает, просто ничего не отображается, когда данные еще не загружены.
Вопрос
Как мне убедиться, что мои загруженные данные отображаются и не возвращают неопределенную ошибку? Единственный способ, которым я могу думать, это позволить пользователю «щелкнуть, чтобы получить данные» при неудачной попытке.
Дополнительная информация
Я не использую шаблоны vue, дочернюю / родительскую структуру или любые библиотеки vue. Я импортирую vue.js через CDN и использую его на странице в сценарии, как показано выше. Я не уверен, что такое использование приведет к таким ограничениям, я только выучил vue.js на базовом уровне, и это работает для компании и начальника ...