У меня есть шаблон, отображающий список. Два из этих значений должны быть геокодированы (начиная с латинских значений, я хочу отобразить адрес). У меня есть значения в консоли, но li отображает [объект Promise]. Я понимаю, что рендеринг не является синхронным, поэтому я попытался использовать флаг для отображения li только тогда, когда у меня есть значения, но они никогда не отображались. В принципе, я понимаю, в чем проблема, но не могу понять, как изменить код, чтобы он работал. Вот шаблон:
<div v-if="!isLoading && Object.keys(currentActivity).length > 0">
<ul
v-for="value in currentActivity"
:key="value.id"
class="listValues"
>
<li>Attività:
<b>{{ value.activity.activityName }} - {{ value.related_activity }}
</b>
</li>
<li>Inizio: <b>{{ value.start }}</b></li>
<li>Fine: <b>{{ value.end }}</b></li>
<li>Durata: <b>{{ timeConvert(value.duration) }}</b></li>
<li v-if="!isGeocoding">Punto di partenza: <b>{{ getAddress(getLatLng(value.starting_point)) }}</b></li>
<li v-if="!isGeocoding">Punto di arrivo: <b>{{ getAddress(getLatLng(value.arrival_point)) }}</b></li>
<li>Stato: <b>{{ value.status | stato }}</b></li>
<li>Distanza: <b>{{ kmCovert(value.travel_distance) }}</b></li>
<li>Kcal consumate: <b>{{ value.kcal }}</b></li>
<li>Produzione di Co2: <b>{{ value.co2 }}</b></li>
<li>Costo: <b>{{ value.cost }} €</b></li>
<li>Utente:
<router-link :to="{name: 'SchedaUtente', params: { userId: value.owner.id }}">
<b style="text-decoration: underline;">
{{ value.owner.username }}
</b>
</router-link>
</li>
</ul>
</div>
Я также пытался поместить условие в div (вместе с !isLoading && Object.keys(currentActivity).length > 0
), но таким образом весь список не отображается. В данных, которые я установил, среди прочего, isGeocoding: true
Другие задействованные методы:
async mounted() {
await this.getActivityData()
},
methods: {
getActivityData() {
this.isLoading = true
const currentUser = this.$store.getters.currentProfile.user
this.currentUser = currentUser
console.log('current activity scheda attivita: ', this.currentActivity)
console.log('current user scheda attivita: ', currentUser)
this.isLoading = false
console.log('is loading after ', this.isLoading)
},
getLatLng(sridPoint) {
const arrayLatLng = sridPoint.replace('SRID=4326;POINT (', '').replace(')', '').split(' ')
const latLng = { lat: parseFloat(arrayLatLng[1]), lng: parseFloat(arrayLatLng[0]) }
return latLng
},
async getAddress(latLng) {
await this.$gmapApiPromiseLazy().then(() => {
const geocodeAddress = new Promise(function(resolve, reject) {
// eslint-disable-next-line no-undef
const geocoder = new google.maps.Geocoder()
geocoder.geocode({ 'location': latLng }, function(results, status) {
if (status === 'OK') {
if (results.length > 0) {
resolve([results[0].formatted_address])
}
} else {
reject(new Error('Couldnt\'t find the location.'))
}
})
})
geocodeAddress.then(function(address) {
console.log(address)
this.isGeocoding = false
console.log('geocoding: ', this.isGeocoding)
return address
})
})
},
Таким образом, два адреса никогда не отображаются, если я уберу флаг isGeocoding, как я уже говорил, я получилзначения в консоли, но [объект Promise] в шаблоне. Может кто-нибудь, пожалуйста, помогите? Спасибо х