VUE +谷歌地图如何包括api google

时间:2017-07-05 23:28:06

标签: javascript google-maps vue.js

我开始使用vue。如何在页面中加入Google API?这是我的代码:

<template>
    <div id="map"></div>
</template>

 <script>

export default {
methods: {
  init () {
    var map
    map = new google.maps.Map(document.getElementById('map'), {
      zoom: 16,
      center: new google.maps.LatLng(-33.91722, 151.23064),
      mapTypeId: 'roadmap'
    })
  }
}
}

</script>

我可以在哪里设置

<script src="https://maps.googleapis.com/maps/api/js?key=YourKey&callback=App.map" async defer></script>

2 个答案:

答案 0 :(得分:1)

脚本元素位于index.html文件中,例如:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <div id="app"></div>
  </body>
  <script src="https://maps.googleapis.com/maps/api/js?key=YourKey&callback=App.map" async defer></script>
</html>

如果这对您不起作用,请尝试从<script>元素src属性的末尾以及async和defer关键字中删除回调,如下所示:

<script src="https://maps.googleapis.com/maps/api/js?key=YourKey"></script>

然后在您的vue实例中,一旦安装了App组件,就调用init()函数。见下文:

export default {
  mounted () {
    this.init()
  },
  methods: {
    init () {
      var map
      map = new google.maps.Map(document.getElementById('map'), {
        zoom: 16,
        center: new google.maps.LatLng(-33.91722, 151.23064),
        mapTypeId: 'roadmap'
      })
    }
  }
}

答案 1 :(得分:0)

我想在</body>之前放置谷歌地图api。确保在google map api之前调用你的vue元素(即在app.js中)。将initMap作为google api的回调。

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <div id="app">
      <map lat="1.23456" lng="100.21345"></map>
    </div>
    <script src="app.js"></script><!-- your vue element should be here -->
    <script src="https://maps.googleapis.com/maps/api/js?key=YourKey&callback=initMap" async defer></script>
  </body>
</html>

这是Map.vue中的代码,其定义为window.initMap(..)。我在地图中也有一个标记(图钉)。

<template>
  <div>
    <div ref="map" style="width: 100%; height: 200px;"></div>
  </div>
</template>

export default {
  props: [
    'lat', 
    'lng'
  ],
  mounted() {
    window.initMap = () => {

      this.mapElement = new google.maps.Map(this.$refs.map, {
        zoom: 14,
        center: {lat: this.lat, lng: this.lng}
      });

      this.marker = new google.maps.Marker({
        position: {lat: this.lat, lng: this.lng},
        map: this.mapElement
      });
    }
  },
  data() {
    return {
      mapElement: null,
      marker: null
    }
  }
}