我已经分叉了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.map
是undefined
;我猜这与问题有关。
编辑未定义的InfoBox.map属性是问题的一部分:在 ic-map.js:189上手动调用 InfoBox.open 工作(模板没有被编译,但这是一个不同的问题),但是click事件仍然不会触发 InfoBox.open 。此外,模板未被包含在内。
解决:我一直在处理marker
一个DOM对象,而不仅仅是一个js对象。很快会发布解决方案。
答案 0 :(得分:1)
工作示例:http://plnkr.co/edit/mamx5EXtHxSo4aqMSZUd
google.maps.event.addListener()
绑定(参见工作示例> ic-map.js:154-156 )。div#map
的子项(参见工作示例> index.html:41-42 )。由于继承和共享模型的工作原理,所有指令必须都在同一个DOM元素上(因为没有人可以向下看,只有向上)。这对于将指令逻辑移出controller(与AngularUI的实现一样)是必要的。在我的实现中,模型在指令(和directive controllers)中的icMaps *指令之间共享。marker
的差异:
marker
附加到DOM对象:ng-repeat="marker in markers"
marker
只是一个js对象。答案 1 :(得分:0)