2017-06-19 15 views
5

Próbowałem zainicjować mapę Google w moim projekcie vue.js podczas gdy w tym skrypcie:Integracja z Google Maps w vue.js

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

Problem polega na tym, że moje .vue pliki wyglądać tak:

<template> 
    ... 
</template> 

<script> 
    ... 
</script> 

I nie może zawierać więcej niż jeden znacznik skryptu w moim pliku vue, mogę pokazać mapę podczas przechodzenia przez index.html ale ja naprawdę nie chcę umieścić js na index.html + Nie mogę wskazać wywołania zwrotnego skryptu w metodzie vue.

Czy macie jakieś pomysły na pokazanie tej mapy za pomocą pliku .vue? Użyłem map vue2-google, ale chciałbym użyć oryginalnej mapy google.

Mam skrzypce który robi coś OK: https://jsfiddle.net/okubdoqa/ bez użycia wywołania zwrotnego w tagu skryptu, ale nie robi to dla mnie ... Dzięki

+1

https://www.npmjs.com/package/google-maps –

Odpowiedz

3

To trochę wybredny uzyskać tej pracy bez korzystania z biblioteki i są prawdopodobnie czystsze sposoby, ale możesz po prostu zaimportować bibliotekę i użyć jej w swoich komponentach, jeśli chcesz zacząć działać.

Po pierwsze, nie używaj opcji defer & w znaczniku <script>. Załadować go w index.html:

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

Następnie w składniku można uzyskać dostęp do globalnego google i przekazać go elementu, gdy składnik jest ustawiony. Na przykład przy użyciu konfiguracji z CLI Vuejs:

<template> 
    <div class="hello"> 
    <h1>{{ msg }}</h1> 

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

<script> 
export default { 
    name: 'hello', 
    data() { 
    return { 
     msg: 'Welcome to Your Vue.js App' 
    }}, 
    mounted: function() { 
     console.log("map: ", google.maps) 
      this.map = new google.maps.Map(document.getElementById('myMap'), { 
      center: {lat:61.180059, lng: -149.822075}, 
      scrollwheel: false, 
      zoom: 4 
      }) 
    } 

} 
</script> 
<style scoped> 
    #myMap { 
    height:300px; 
    width: 100%; 
    } 
</style> 
+0

Dziękujemy za powtórki, niestety mam błąd mówiąc „błąd w zamontowanym hakiem:” ReferenceError: Google nie jest zdefiniowane "jak gdyby skrypt jeszcze nie istniał ... –

+0

OK nevermind Właśnie umieściłem skrypt w tagu głowy indeksu zamiast ciała i zadziałało –

+0

Ten błąd odniesienia pochodzi od ESLint. Dodaj go jako zmienną globalną https : //stackoverflow.com/a/30400159 –

9

Sugeruję użyciu npm google-maps zamiast dodawać skrypt w pliku index.html. Może nie być konieczne wywoływanie interfejsu API map Google na każdej stronie, a powiedziałbym, że lepiej jest używać Webpack poprawnie. Można użyć npm install google-maps

import GoogleMapsLoader from 'google-maps' 

mounted: function() { 
    GoogleMapsLoader.load(function(google) { 
    let map = new google.maps.Map(document.getElementById('map'), { 
     zoom: 15, 
     center: position 
    }) 
    }) 
} 
+0

czy ten pakiet zapewnia tę samą usługę? https://github.com/googlemaps/google-maps-services-js tnks – anasmorahhib