ХОРОШО. Я не полный новичок и у меня есть Vue xp, но это подслушивает меня. Какая действительно очевидная вещь мне не хватает.
У меня есть объект, загруженный через вызов ajax внутри смонтированного метода:
job: {
"title": "value",
"location": {
"name":"HONG KONG"
}
}
Когда я называю {{job.title}} все хорошо. Когда я вызываю {{job.location.name}}, у меня есть неопределенная ошибка, но значение отображается. Когда я вызываю {{job.location}}, я получаю объект json так, чтобы он был определен.
Aaargh! Я уверен, что это действительно просто, но не может понять, почему это не так прямо, как должно быть.
//Дополнительные
Это мой весь класс Vue
const router = new VueRouter({
mode: 'history',
routes: []
});
const app = new Vue( {
router,
el: '#app',
data: {
job: {}
},
mounted: function () {
var vm = this
jQuery.ajax({
url: 'https://xxx' + this.jobId,
method: 'GET',
success: function (data) {
vm.job = data;
},
error: function (error) {
console.log(error);
}
});
},
computed: {
jobId: function() {
return this.$route.query.gh_jid
}
}
})
Когда ваш компонент визуализирует, он пытается получить значение из job.location.name
но location
не определено до завершения запроса ajax. Поэтому я предполагаю, что ошибка - это вид Cannot read property 'name' of undefined
.
Чтобы исправить это, вы можете определить computed
свойство locationName
и вернуть, например, пустую строку, когда еще нет загруженного объекта задания:
computed:{
//...
locationName() {
return this.job.location ? this.job.location.name : '';
}
}
Или вы можете определить вычисленное для location
и вернуть пустой объект, если нет места, или вы можете просто добавить пустой объект местоположения к вашим исходным данным (если вы уверены, что ваш ответ API всегда имеет location
), например job: { location: {}}
все способы исправить вашу проблему.
Также есть способ исправить его с помощью директивы v-if
в вашем шаблоне:
<div v-if="job.location">
{{ job.location.name }}
<!-- other location related stuff -->
</div>
job.title
просто возвращает undefined, если нет заголовка prop без какой-либо ошибки. Ваше местоположение является вложенным объектом, и ошибка связана со свойствами объекта местоположения.