2

我正在使用此处定义的角度谷歌地图 api: https ://angular-ui.github.io/angular-google-maps/#!/api

我有以下 DOM 结构

<ui-gmap-markers models="destinationMarkers" coords="'self'" idKey='self.idkey' >
    <div ui-gmap-windows models="destinationMarkers" control="infoWindows">
        <div ng-non-bindable>
            <!-- {{contents}} -->
        </div>
    </div>
</ui-gmap-markers>

我正在尝试使信息窗口在单击地图的任何其他部分或打开另一个窗口时关闭。我得到的最接近的是调用:scope.infoWindows.getChildWindows()它可以访问标记对象,但是调用相关的 hideWindow 函数似乎什么都不做。有谁知道如何做到这一点?

4

1 回答 1

4

我刚刚遇到了完全相同的问题,经过一番折腾,我有了一个解决方案(对不起,如果我玩游戏有点晚了)

您必须像这样在窗口上设置控制器属性...

<ui-gmap-window ng-if="m.response" control="googlemap" >

“googlemap”控件必须是范围的成员,并且“控件”必须定义为地图对象上的空对象,如下所示...

$scope.googlemap = {};

$scope.map = {
    zoom: 5,
    center: getMapCenter(response),
    options: {
        // draggable: false
    },
    control: {}
};

现在我们可以将一个事件附加到标记上,这将使我们能够遍历窗口列表并像这样隐藏它们......

markers.push({
    id: i,
    ...
    ...
    events: {
        click: function(e){
            var windows = $scope.googlemap.getChildWindows();

            for (var i = 0; i < windows.length; i++){
                windows[i].hideWindow()
            }
        }
    }
});
于 2015-11-27T11:26:27.523 回答