Как закрыть ранее открытое информационное окно карт Google при нажатии на новый маркер - PullRequest
0 голосов
/ 03 марта 2019

У меня есть две разные функции для извлечения школ и ресторанов из службы Мест.В одной функции я передаю типы как Школы и выбираю массив школ относительно моего текущего местоположения и использую значок, чтобы показать на карте.И в другой функции я выбираю множество ресторанов.Теперь проблема с информационным окном.Я нажимаю на иконку школы, и она открывает информационное окно, затем я нажимаю на иконку ресторана, но ранее открытая иконка школы не приближается.Поскольку оба информационных окна находятся в двух разных функциях, Как закрыть все ранее открытые информационные окна.

getSchoolsList() {
    var markers = [];
    var infoWindow = [];
    if (counter == 0) {
      let service = new google.maps.places.PlacesService(map);
            ...
        // call placesService and fetch results
            ...

          }, (results, status) => {

            if (status === google.maps.places.PlacesServiceStatus.OK) {
              for (var i = 0; i < results.length; i++) {
                var place = results[i];
                var infowindow = new google.maps.InfoWindow();
                var marker = new google.maps.Marker({
                  map: map,
                  position: place.geometry.location,
                  icon: './assets/images/marker_inactive.png',
                });

                markers.push(marker);

                // set infowindow for every marker 
                google.maps.event.addListener(marker, 'mouseover', function () {
                  if (infowindow != null) {
                    infowindow.close();
                  }
                  google.maps.event.addListener(map, "click", function(event) {
                    infowindow.close();
                });
                  var index = markers.indexOf(this);
                  infowindow.setContent('<h1>hi</h1>');
                  infowindow.open(map, this);
              });

              }
            }

          });
        });



   getParksList() {
    var markers = [];
    if (parkcounter == 0) {
      let service = new google.maps.places.PlacesService(map);
      ...
        // call placesService and fetch results
            ...


          }, (results, status) => {
            console.log('results..', results);
              this.lengthOfSchools = results.length;
            console.log('this.lengthOfSchools', this.lengthOfSchools);
            if (status === google.maps.places.PlacesServiceStatus.OK) {
              for (var i = 0; i < results.length; i++) {
                var place = results[i];
               var infowindow = new google.maps.InfoWindow();
                var marker = new google.maps.Marker({
                  map: map,
                  position: place.geometry.location,
                  icon: './assets/images/marker_active.png',
                });

                markers.push(marker);

                 // set infowindow for every marker 
                 google.maps.event.addListener(marker, 'mouseover', function () {
                  if (infowindow != null) {
                    infowindow.close();
                  }
                  google.maps.event.addListener(map, "click", function(event) {
                    infowindow.close();
                });
                  var index = markers.indexOf(this);
                  infowindow.setContent('<h1>hi</h1>');

                  infowindow.open(map, this);
              });




              }
            }

          });
        });
...