我正在使用ng-map指令显示地图。地图上的标记会在标记上有鼠标悬停时显示一个信息窗口。但是有时,信息窗口不会出现。

除此之外,由于每次问题都发生在不同的标记上,因此我无法确定正在发生的任何模式。我正在将数据输出到信息窗口,但是问题似乎与“数据无关”,因为选定位置的所有数据在发生问题时似乎都是正确的。

我有一个showInfo方法正在像这样的鼠标悬停时被调用:

showInfo(event, loc, infoWindowTemplate, map, mapsController) {



loc-单击位置的数据
infoWindowTemplate-要使用的信息窗口模板(对于特定的地图来说总是相同的,但是这是可配置的,因此,如果我要显示移动地图,则要使用一个infowindow模板,如果要显示桌面地图,我使用另一种)
map-控制器上对NgMap对象的引用
mapsController-控制器本身(我强烈怀疑这是一种不好的代码味道-这是我想出的最简单的方法,即在鼠标悬停后将引用返回给控制器)


这是方法的主体:

        map.getMap(mapsController.mapId).then(function (myMap) {

            var selectedMarker = myMap.markers["L: " + loc.position[0] + ", " + loc.position[1]];
            selectedMarker.locationInfo = loc;

            console.log("about to show infowindow - infoWindowTemplate = " + infoWindowTemplate);
            // console output = "cached-myTemplate.html"

            myMap.showInfoWindow(infoWindowTemplate, selectedMarker);


selectedMarker绝对是指正确的标记对象。我的模板如下所示:

<script id="cached-myTemplate.html" type="text/ng-template">
        <a class="map-location__link" href="/locations/{{anchor.locationInfo.locationId}}" target="_blank">
                <img src="{{anchor.locationInfo.locationImageThumbnail}}" />
        </a>
</script>


问题似乎是,调用“ showInfoWindow”间歇性地以某种方式失败(尽管控制台中没有错误)。任何有关导致问题的原因或我可以做些什么来诊断它的想法的意见或答案,将不胜感激!

最佳答案

我发现这是一个计时问题。延迟调用showInfoWindow的“转向”(通过添加短暂超时)解决了以下问题:

map.getMap(mapsController.mapId).then(function (myMap) {

            ....

            this.$timeout(function () {
                dealmap.showInfoWindow(infoWindowTemplate, selectedMarker);
            }, 100)

}.bind(this));

关于javascript - Ng-map-标记上的信息窗口有时不显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46402918/

10-09 14:59
查看更多