2

Я использую угловую Google Maps API определено здесь: https://angular-ui.github.io/angular-google-maps/#!/apiСкрытие все информационные окна по щелчку с угловыми-Google-карты

У меня есть следующая структура 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, похоже, ничего не делает. Кто-нибудь знает как это сделать?

+0

пожалуйста, напишите рабочую демо-версию того, что вы до сих пор (* предпочтительно http: //plnkr.co*) –

+1

Вы можете увидеть его на странице https://angular-ui.github.io/angular-google-maps/#!/api под пунктом меню «Windows», внизу. Весь другой код работает нормально - я просто не знаю, как получить доступ к этим информационным окнам и удалить их. – userqwert

ответ

4

Я просто попадались точно такой же вопрос и после небольшой возни у меня есть решение (извините, если им немного поздно к игре)

Вы должны установить свойство контроллера в окне, как так. ..

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

контроль «GoogleMap» должен быть членом Scope, и «контроль» должен быть определен как пустой объект на объекте карты, как так ...

$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() 
      } 
     } 
    } 
}); 
Смежные вопросы