【发布时间】:2017-09-12 08:26:29
【问题描述】:
我正在尝试让 Google 地图与 Vue.js 一起使用。
这是我正在使用的 HTML。假设 v-if="activeStep === 1" 可以正常工作并正确显示预期的 div:
<div id="map-container" v-if="activeStep === 1">
<div id='location-map'></div>
</div>
...
<script src="https://maps.googleapis.com/maps/api/js?key=MYKEY"></script>
id 样式:
#location-map { height: 250px; }
#map-container { padding: 15px 0; }
和我的 Vue 绑定:
if(document.getElementById("map-container")) {
const mapVue = new Vue({
el: '#map-container',
data: {
activeStep: 1,
defaultLatLng: {lat: 37.5665, lng: 126.9780}
},
mounted: function() {
var map = new google.maps.Map(document.getElementById('location-map'), {
zoom: 15,
center: this.defaultLatLng,
scrollwheel: false,
disableDoubleClickZoom: true,
panControl: false,
streetViewControl: false,
draggable: false
});
var marker = new google.maps.Marker({
position: this.defaultLatLng,
map: map
});
}
})
}
但是地图没有显示。我在这里做错了吗?
我能想到两个问题:
Google 地图文档使用
&callback=initMap调用脚本并将函数命名为initMap,而我没有这样做。相反,我让函数调用发生在 vue 的 mount 指令中。不知道如何从 vue 方法调用 initMap 。另外,我没有在脚本上使用async defer(如<script async defer src="https://maps.googleapis.com/maps/api/js?key=MYKEY"></script>),因为我在某处读到这不是必需的。-
李>v-if实际上会移除元素并根据activeStep显示它,所以可能在生成该部分 DOM 时 map 函数没有重新初始化?
任何帮助将不胜感激。提前致谢!
【问题讨论】:
标签: ruby-on-rails vue.js