我一直在尝试在由Angular Google Maps library中的指令google.maps.Map创建的对象上设置点击事件侦听器。ui-gmap-google-map
我需要动态执行此操作,因此(至少通过我的简短测试)似乎(至少通过我的简短测试)events在指令上使用参数ui-gmap-google-map不起作用(因为它似乎只“读取”了一次参数值,但也许我错了那)。
所以我决定使用参数,它使用方法和.control扩充由参数值命名的对象。这是我的指令用法:getGMaprefresh
<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对象没有增加getGMapor refresh。根据我对文档的理解,它似乎应该是。
我使用(Angular 服务)使用几百毫秒的延迟包装了addListener调用,然后它起作用了,因为到那时该对象已经用.$timeoutmapSetupgetGMap
有没有办法避免必须使用$timeout任意延迟来等待control-specified 对象实际被增强?