我问了一个很多人问的问题,但没有人给出明确的答案,几乎是在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();
}
}
将来可能有所帮助......谁知道?
答案 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;
}