使用Angular Map @agm

时间:2017-11-04 11:06:28

标签: angular google-maps

我问了一个很多人问的问题,但没有人给出明确的答案,几乎是在AGM(Google地图的Angular 2包)上

这是我的代码,但我的第一个打开的标记不想关闭,其他标记关闭一半

clickedMarker(marker: Marker, infoWindow, index: number) {

   if (this.infoWindow && this.infoWindow !== infoWindow) {
      this.infoWindow.close();
    }
    this.infoWindow = infoWindow;
}

有人可以使用关闭功能或事件发射器https://angular-maps.com/api-docs/agm-core/components/AgmInfoWindow.html#source来帮助我解决这个紧迫的问题

感谢您的时间和帮助;)

编辑:找到答案

我的<agm-info-window #infoWindow>使用<a *ngIf="myCondition"..>{{address}}</a>显示了多个信息,但是当条件再次评估为true时,它似乎没有呈现弹出窗口。

我将其替换为<a [class.hidden]="!myCondition">..</a>,并修复了多个标记显示。

另一个好的做法是在地图上点击时关闭,如果打开则关闭它:

clickedMap($event) {
   if (this.infoWindow) {
      this.infoWindow.close();
   }
}

将来可能有所帮助......谁知道?

2 个答案:

答案 0 :(得分:3)

经过长时间的研究和不明确的解决方案,终于有了一个很好的解决方案,可以在打开一个新的agm-info-window时清除它。

这是我的component.html:

 <agm-map (mapClick)="close_window($event)" [fullscreenControl]='true' [mapTypeControl]='true' [latitude]="lat" [longitude]="lng" [zoom]="13" [scrollwheel]="false">
     <div *ngFor="let data of zonas">
        <agm-marker (markerClick)=select_marker(infoWindow) [latitude]="data.latitud" [longitude]="data.longitud">
           <agm-info-window #infoWindow >            
           </agm-info-window>
         </agm-marker>
      </div>
  </agm-map>

这是我的component.ts:

constructor(public apiService: ApiService) {}
infoWindowOpened = null
previous_info_window = null
...
close_window(){
if (this.previous_info_window != null ) {
  this.previous_info_window.close()
  }    
}

select_marker(data,infoWindow){
 if (this.previous_info_window == null)
  this.previous_info_window = infoWindow;
 else{
  this.infoWindowOpened = infoWindow
  this.previous_info_window.close()
 }
 this.previous_info_window = infoWindow
}

因此,每次打开新窗口时,它都会检测到该事件并关闭上一个事件,如果用户在地图的任何其他部分中单击窗口外,这也将关闭已打开的窗口。

答案 1 :(得分:1)

<agm-map (mapClick)="mapClick($event)">
<agm-marker (markerClick)=markerClick(iw)>
<agm-info-window  #iw>

  currentIW: AgmInfoWindow;
  previousIW: AgmInfoWindow;

constructor(){
  this.currentIW = null;
  this.previousIW = null;
}

// other functions
mapClick() {
    if (this.previousIW) {
      this.previousIW.close();
    }
}

markerClick(infoWindow) {
    if (this.previousIW) {
      this.currentIW = infoWindow;
      this.previousIW.close();
    }
    this.previousIW = infoWindow;
}