5

我已经分叉了 AngularUI 的 uiMap 指令,以便将InfoWindow交换为InfoBox并添加MarkerClusters。我对 uiMap -> icMap 进行了一些广泛的更新;最值得注意的是,我将指令逻辑移出控制器,使 uiMap 成为“主”指令)。除了单击本机 MapMarker 不会打开信息框外,我几乎已经完成了所有工作。

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

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

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

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

但是,现在当我单击本机 MapMarker 时,什么也没有发生,控制台中也没有错误(但所有其他事件仍然正常触发)。

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

map.json是数据文件
angular.jsangular-ui.jsinfobox.js是 lib 文件

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

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

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

4

2 回答 2

1

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

  1. Original > ic-map.js:156我的事件监听器应该已经绑定google.maps.event.addListener()(参见工作示例 > ic-map.js:154-156)。
  2. 另外,使用模板太麻烦了,所以我添加了 2 个 div 作为子级div#map(参见Working Example > index.html:41-42)。由于继承和共享模型的工作方式,所有指令必须位于同一个 DOM 元素上(因为没有人可以向下看,只能向上看)。这是将指令逻辑移出控制器所必需的(就像来自 AngularUI 的实现一样)。在我的实现中,模型在指令(和指令控制器)内的 icMaps* 指令之间共享。
  3. 差异marker
    • uiMapMarkermarker附加到一个 DOM 对象:ng-repeat="marker in markers"
    • icMapMarkersmarker只是一个 js 对象。
于 2013-05-03T17:48:00.717 回答
0

我相信您需要将 jQuery 添加为依赖项。

uiMap 的未记录的 jQuery 依赖项

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

于 2013-05-02T19:49:11.273 回答