我一直在尝试在由Angular Google Maps library中的指令google.maps.Map
创建的对象上设置点击事件侦听器。ui-gmap-google-map
我需要动态执行此操作,因此(至少通过我的简短测试)似乎(至少通过我的简短测试)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>
最后,我异步加载 Google Maps API,并依靠GoogleMapApi
服务/承诺(Angular Google Maps 的一部分)来了解何时可以开始安全地处理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 is not a function”,因为该mapSetup
对象没有增加getGMap
or refresh
。根据我对文档的理解,它似乎应该是。
我使用(Angular 服务)使用几百毫秒的延迟包装了addListener
调用,然后它起作用了,因为到那时该对象已经用.$timeout
mapSetup
getGMap
有没有办法避免必须使用$timeout
任意延迟来等待control
-specified 对象实际被增强?