AngularJS:事件回调不会在谷歌地图本机地图标记上触发

时间:2013-04-19 20:26:19

标签: javascript events google-maps-api-3 angularjs infobox

我已经分叉了AngularUI的uiMap指令,以便将 InfoWindow 交换为 InfoBox 并添加 MarkerClusters 。我对uiMap做了一些大量的更新 - > icMap;最值得注意的是,我将指令逻辑移出控制器,使uiMap成为“主”指令。我几乎所有东西都在工作,除了单击原生MapMarker不会打开信息框。

认为原因是我没有将click事件正确绑定到本机MapMarker( ic-map.js:163 )。

在我重新组织uiMap之前,我只是在 map.js 中添加了icMapInfoBox指令。其 open 事件由以下人员注册/触发:

ui-event="{'map-click':'openMarkerInfo(marker)'}"

在其控制器中定义了 openMarkerInfo()(从我的仓库复制/粘贴:GitHub Gist)。

但是,现在当我点击原生MapMarker时,没有任何反应,我在控制台中没有错误(但所有其他事件仍然正常启动)。

原始Plunk
简化Plunk (已移除MarkerClusters)
在两个插件中,问题可能在于ic-map.js(列表中的第一个文件)

map.json 是一个数据文件
angular.js angular-ui.js infobox.js 是lib文件

修改我注意到InfoBox.mapundefined;我猜这与问题有关。

编辑未定义的InfoBox.map属性是问题的一部分:在 ic-map.js:189上手动调用 InfoBox.open 工作(模板没有被编译,但这是一个不同的问题),但是click事件仍然不会触发 InfoBox.open 。此外,模板未被包含在内。

解决:我一直在处理marker一个DOM对象,而不仅仅是一个js对象。很快会发布解决方案。

2 个答案:

答案 0 :(得分:1)

工作示例:http://plnkr.co/edit/mamx5EXtHxSo4aqMSZUd

  1. 原创> ic-map.js:156 我的事件监听器应该与google.maps.event.addListener()绑定(参见工作示例> ic-map.js:154-156 )。
  2. 另外,使用模板太麻烦了,所以我添加了2个div作为div#map的子项(参见工作示例> index.html:41-42 )。由于继承和共享模型的工作原理,所有指令必须都在同一个DOM元素上(因为没有人可以向下看,只有向上)。这对于将指令逻辑移出controller(与AngularUI的实现一样)是必要的。在我的实现中,模型在指令(和directive controllers)中的icMaps *指令之间共享。
  3. marker的差异:
    • uiMapMarker marker附加到DOM对象:ng-repeat="marker in markers"
    • icMapMarkers marker只是一个js对象。

答案 1 :(得分:0)

我相信你需要添加jQuery作为依赖。

uiMap的未记录的jQuery依赖

https://github.com/angular-ui/angular-ui/issues/552