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

jac*_*cob 5 javascript events google-maps-api-3 angularjs infobox

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

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

在我重新组织uiMap之前,我只是icMapInfoBoxmap.js中添加了一个指令.其公开活动由以下人员注册/触发:

ui-event="{'map-click':'openMarkerInfo(marker)'}"
Run Code Online (Sandbox Code Playgroud)

这被称为openMarkerInfo()在其控制器中定义(从我的回购复制/粘贴:GitHub的要点).

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

Original Plunk
Simplified Plunk(删除MarkerClusters)
在两个插件中,问题可能在于ic-map.js(列表中的第一个文件)

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

编辑我注意到InfoBox.mapundefined; 我猜这与问题有关.

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

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

jac*_*cob 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 元素上(因为没有人可以向下看,只能向上看)。这对于将指令逻辑移出控制器是必要的(就像 AngularUI 的实现一样)。在我的实现中,该模型在指令(和指令控制器)内的 icMaps* 指令之间共享。
  3. 差异marker
    • uiMapMarkermarker附加到 DOM 对象:ng-repeat="marker in markers"
    • icMapMarkersmarker只是一个 js 对象。