angular - 单击标记时打开弹出窗口
问题描述
我有这个代码:
popupIsOpen = false;
const marker: Marker = this.map.addMarkerSync(markerData);
marker.on(GoogleMapsEvent.MARKER_CLICK).subscribe(this.markerClick);
markerClick(params: any) {
this.popupIsOpen = !this.popupIsOpen;
const marker: Marker = params[1] as Marker;
}
模板:
<ion-content>
<div id="map_canvas"></div>
</ion-content>
<div [ngClass]="{'overlay': popupIsOpen, 'hidden': !popupIsOpen}">
<ion-card>
<ion-card-content>
<ion-button (click)="popupIsOpen=!popupIsOpen">close</ion-button>
Content
</ion-card-content>
</ion-card>
</div>
单击标记时不显示弹出窗口。我做错了什么?提前谢谢。
解决方案
谷歌地图 API 事件不是由 zone.js 修补的,因此不在 ngZone 中运行。您应该使用以下命令手动重新进入该区域ngZone.run()
:
constructor(private ngZone: NgZone) {}
markerClick(params: Marker[]) {
this.ngZone.run(() => {
this.popupIsOpen = !this.popupIsOpen;
const marker: Marker = params[1] as Marker;
});
}
您也有可能丢失this
上下文,因为您没有正确绑定事件。有几种选择,一种是在绑定时使用匿名箭头函数表示法:
marker.on(GoogleMapsEvent.MARKER_CLICK).subscribe((params) => this.markerClick(params));
推荐阅读
- angular - 如何使用 Angular 6/7 将服务注入另一个服务?(providedIn: 'root') 服务总是未定义的
- kotlin - 通配符导入分组
- html - 如何更改预填充文本输入 html 的颜色?
- c++ - OpenGL中的线框立方体渲染空白
- javascript - 是否可以通过单击最后一列上的按钮从表中的第一列获取 innerhtml 值
- c# - 显示包含特定整数类型字段的最大值的整行。返回错误
- java - 如何在java中释放查询间隔
- unity3d - 设置相机视口的 X 会导致渲染黑色条带
- angular - 错误 TS2339:“typeof Observable”类型上不存在属性“timer”。“switchMap”和“takeUntil”中断流程
- php - 如何增加'的高度和宽度
' 自动基于内容?我想增加 高度和宽度自动?