Próbowałem skonfigurować detektory zdarzeń kliknięcia na obiekcie google.maps.Map
, który został utworzony przez dyrektywę ui-gmap-google-map
z Angular Google Maps library.Jak poczekać na graficzne mapy Google, aby dołączyć getGMap do obiektu kontrolnego
Potrzebuję zrobić to dynamicznie, więc wydaje mi się (przez moje krótkie testy co najmniej), że używanie parametru events
na dyrektywie ui-gmap-google-map
nie będzie działać (ponieważ wydaje się "czytać" wartość parametru tylko raz, ale może się mylę).
Postanowiłem więc użyć parametru control
, który powiększa obiekt określony przez wartość parametru metodami getGMap
i refresh
. Oto co mój Wykorzystanie dyrektywa wygląda następująco:
<ui-gmap-google-map center="appCtrl.mapSetup.center"
zoom="appCtrl.mapSetup.zoom"
control="appCtrl.mapSetup">
</ui-gmap-google-map>
Wreszcie mam ładowania API Map Google asynchronicznie, a opierając się na GoogleMapApi
usług/obietnicy (część kątowe Google Maps), aby wiedzieć, kiedy mogę zacząć bezpiecznie postępowanie z obiektem google.maps.Map
(np. dodawanie detektorów zdarzeń itp.). Oto mały przykład, co to wygląda:
// inside the AppController constructor, see the fiddle linked below
var mapSetup = this.mapSetup;
GoogleMapApi.then(function() {
google.maps.event.addListener(mapSetup.getGMap(), 'click', function() {
alert('hello');
});
Więc gdy strona jest załadowany (here's the fiddle), otrzymuję „Błąd typu: niezdefiniowane nie jest funkcją”, ponieważ obiekt mapSetup
nie została zwiększona z getGMap
lub refresh
. Wygląda na to, że tak powinno być, w oparciu o moje zrozumienie dokumentacji.
ja owinięty połączenia addListener
z $timeout
(służba kątowa) używając kilkaset milisekund opóźnienia, a następnie pracował ponieważ obiekt mapSetup
miał do tego czasu został wzbogacony o getGMap
.
Czy istnieje sposób na uniknięcie konieczności używania $timeout
z arbitralnym opóźnieniem, aby poczekać, aż określony obiekt zostanie faktycznie rozszerzony?
Ta odpowiedź wygląda na dużo czystszą. Aktualizacja poprawnej odpowiedzi. – Chadley08
IsReady jest teraz uiGmapIsReady od Angular Google Maps v2.0 – bigtex777
Potwierdzam, że liczba całkowita przekazana do obietnicy "uiGmapIsReady" jest numerem dyrektywy ui-'gmap-google-map' na stronie. – Alain1405