我一直在尝试在google.maps.Map
由创建的对象ui-gmap-google-map
指令来自Angular 谷歌地图库.
我需要动态地执行此操作,因此(至少通过我的简短测试)似乎使用events
上的参数ui-gmap-google-map
指令不起作用(因为它似乎只“读取”参数值一次,但也许我错了)。
所以我决定使用control
参数,它使用方法扩充由参数值命名的对象getGMap
and 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 地图的一部分)了解我何时可以开始安全地处理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:未定义不是一个函数”,因为mapSetup
对象尚未被增强getGMap
or refresh
。根据我对文档的理解,似乎应该是这样。
我包裹了addListener
打电话给$timeout
(Angular 服务)使用了几百毫秒的延迟,然后它就起作用了,因为mapSetup
那时物体已经被增强了getGMap
.
有没有办法避免使用$timeout
任意延迟等待,直到control
-指定的对象实际上被增强了?