【问题标题】:angularjs-google-maps - info-window does not work with ng-repeatangularjs-google-maps - 信息窗口不适用于 ng-repeat
【发布时间】:2015-09-26 23:32:05
【问题描述】:

我使用带有 ng-map 的谷歌地图,并使用标记和附加到这些标记的信息窗口,这些标记通过 ng-repeat 添加到地图中。我的角度视图如下:

<div id="mapWrap" map-lazy-load="https://maps.google.com/maps/api/js">      
<map center="current-location" zoom="9" on-bounds_changed="getLocations()">

    <marker  ng-repeat="myMarker in myMarkers"
        clickable="true"
        on-click="showInfoWindow(event, '{{myMarker.infoWindowId}}')"
        id="{{myMarker.id}}"
        position="[{{myMarker.lat}},{{myMarker.lon}}]"
        title="{{myMarker.title}}"
        draggable="false"
        opacity="{{myMarker.opacity}}"
        visible="{{myMarker.visible}}"
        icon="{{myMarker.icon}}">
    </marker>

    <info-window ng-repeat="infoWindow in infoWindows" 
        id="{{infoWindow.id}}" 
        visible-on-marker="{{infoWindow.markerId}}">
            <div ng-non-bindable="">
                <h1>{{infoWindow.name}}</h1>
                <p>{{infoWindow.text}}</p>
                <a href="{{infoWindow.url}}">Get forecast</a>
            </div> 
    </info-window>

</map>
</div>

myMarker.infoWindowId 对应于infoWindow.idmyMarker.id 对应于infoWindow.markerId。这似乎没有问题,标记和信息窗口在加载视图和控制器后在 DOM 中列出得很好。

标记在地图上显示得很好,因为它们会在执行on-bounds_changed="getLocations()" 函数时更新。

信息窗口列表也在getLocations()中更新,标记和信息窗口可以在DOM中看到,但是当我点击相应的标记时信息窗口不显示。尝试在视图中使用单个信息窗口项并在用户单击标记时更新其内容,但没有任何改变。

谁能指出我在这里没有做什么的正确方向?谢谢。

第二个问题:如果我必须在 info-window 内容中使用ng-non-bindable(否则 ng-map 会抱怨),我如何动态更新/生成 info-window 的内容?但是这个问题应该只有在显示 infow-windows 之后才会出现。

【问题讨论】:

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


    【解决方案1】:

    抱歉回复晚了。

    简短回答,info-window 不得与 ng-repeat 一起使用。

    http://plnkr.co/edit/lBxdmm?p=preview

      <marker  ng-repeat="myMarker in myMarkers"
          name="A" text="B" url="http://foo.bar"
          clickable="true"
          on-click="showInfoWindow('myInfoWindow')"
          id="{{myMarker.id}}"
          position="[{{myMarker.lat}},{{myMarker.lng}}]"
          draggable="false"
          opacity="{{myMarker.opacity}}">
      </marker>
    
      <info-window id="myInfoWindow">
        <div ng-non-bindable="">
            <h1>{{this.name}}</h1>
            <p>{{this.text}}</p>
            <a href="{{this.url}}">Get forecast</a>
        </div> 
      </info-window>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      相关资源
      最近更新 更多