axios.get
- асинхронная функция. Vue Hooks не будет ждать, пока предыдущий хук завершит свою работу, если предыдущий хук содержал асинхронную функцию.
В вашем случае смонтированный хук завершил работу до того, как созданный хук закончил, поэтому this.post
все еще пустой массив.
Для хорошей практики вам нужно сохранить экземпляр map
в данных и добавить маркер на карту в обратном вызове axios.get
. Вот пример кода.
export default {
type: Array,
data() {
return {
mymap: null,
post: []
}
},
created() {},
mounted() {
this.mymap = L.map(this.$refs['mapElement']).setView([40.783058, -73.971252], 12);
var myIcon = L.icon({
iconUrl: redMarker,
iconSize: [38, 95],
iconAnchor: [22, 94],
popupAnchor: [-3, -76],
})
var myIcon2 = L.icon({
iconUrl: greenMarker,
iconSize: [38, 95],
iconAnchor: [22, 94],
popupAnchor: [-3, -76],
})
var marker = L.marker([40.783058, -73.971252], { icon: myIcon }).addTo(mymap);
// console.log([this.post[0].lat])
axios.get("")
.then((response) => {
// console.log(response.data.resource)
this.post = response.data.resource;
var marker2 = L.marker([this.post.lat, this.post.lng], { icon: myIcon2 }).addTo(this.mymap);
// console.log([this.post.lat])
}).catch(error => {
console.log(error.message);
})
}
}