Я пытаюсь настроить прослушиватели событий на объекте google.maps.Map
, созданный директивой ui-gmap-google-map
из Angular Google Maps библиотека.
Мне нужно сделать это динамически, поэтому, по крайней мере, по моему краткому тестированию, использование параметра events
в директиве ui-gmap-google-map
не будет работать (потому что кажется, что "читать" значение параметра только один раз, но, возможно, я ошибаюсь в этом).
Поэтому я решил использовать параметр control
, который увеличивает объект, названный значением параметра, с помощью методов getGMap
и refresh
. Вот как выглядит моя директива:
<ui-gmap-google-map center="appCtrl.mapSetup.center"
zoom="appCtrl.mapSetup.zoom"
control="appCtrl.mapSetup">
</ui-gmap-google-map>
Наконец, я загружаю API Карт Google асинхронно и полагаюсь на услугу/обещание GoogleMapApi
(часть Angular Карты Google), чтобы знать, когда я могу безопасно работать с объектом google.maps.Map
(например, добавление слушателей событий и т.д.). Вот небольшой пример того, как это выглядит:
// 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');
});
Итак, когда страница загружается (здесь скрипка), я получаю "TypeError: undefined не является функцией", потому что mapSetup
объект не был добавлен с помощью getGMap
или refresh
. Похоже, что это должно было быть основано на моем понимании документации.
Я завернул вызов addListener
с помощью $timeout
(службы Angular) с задержкой в несколько сотен миллисекунд, а затем он работал, потому что к этому времени объект mapSetup
был дополнен getGMap
.
Есть ли способ избежать использования $timeout
с произвольной задержкой до тех пор, пока объект control
-specified не будет добавлен?