2

ここで定義されているAngular Googleマップ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>

マップの他の部分がクリックされたとき、または別のウィンドウが開いたときに情報ウィンドウが閉じるようにしようとしています。私が得た最も近いのはcalling:です。scope.infoWindows.getChildWindows()これはmarkerオブジェクトへのアクセスを提供しますが、関連付けられた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 に答える